About perl script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting About perl script
# 1  
Old 03-25-2009
About perl script

Hi all,
I have written a perl script using two arrays...
but I couldnot access the all elements of the arrays. bellow is my code..

#!/usr/bin/perl

use strict;
my $server= "vsacentral";
my $dt = `date +%D`;
my $dt1= `date +%b" "%d`;
my $id = "";
my @cron_scripts = qw{ wms_vsa_load.ksh
visteon_vsa_load.ksh
philmor_vsa_load.ksh
ing_vsa_load.ksh
franklin_vsa_load.ksh
fluor_vsa_load.ksh
dow_vsa_load.ksh
disney_vsa_load.ksh
bp_vsa_load.ksh
belo_vsa_load.ksh};
my @log_files = qw{ wms_import.log
visteon_import.log
philmor_import.log
ing_import.log
franklin_import.log
fluor_import.log
dow_import.log
disney_import.log
bp_import.log
belo_import.log};

my $str=qq{
<html>
<body>
<table align=center style="font-family:verdana;font-size:12px;border:1px solid #000000;">
<tr>
<th>Server:$server</th>
<th>Date:$dt</th>
</tr>
</table>
<table align=center style="font-family:verdana;font-size:12px;border:1px solid #000000;">
<tr>
<th>Scheduled Date</th>
<th>Scheduled Run Time</th>
<th>Sheduled Job</th>
<th>Log Date</th>
<th>Log Time</th>
<th>Log File</th>
</tr>
};

for ( $id = 0; $id <=$#log_files; $id++){
my $s_job=shift@cron_scripts;
my $s_runtime=`crontab -l|grep -i $s_job|cut -c 1-5`;
my $log_file=shift@log_files;
my $log_date=`ls -l *im*.log|grep -i $log_file|tr -s ' '|cut -d ' ' -f 6-7`;
my $log_time=`ls -l *im*.log|grep -i $log_file|tr -s ' '|cut -d ' ' -f 8`;
$str.=qq{
<tr>
<td align=center>$dt1</td>
<td align=center>$s_runtime</td>
<td>$s_job</td>
<td>$log_date</td>
<td>$log_time</td>
<td>$log_file</td>
</tr>};
}
$str.=qq{
</table>
<br></br>
</body>
</html>};
print $str;

Plz help..
thanks in advance.
# 2  
Old 03-25-2009
First, please use [code ][/code] tags for source and listings. Easier to read means easier to understand means easier to correct.
Second, your for loop is off by one. $#array returns the index of the last element, eg. for an array with 3 elements it's 2. So your loop should be
Code:
for ( $id = 0; $id <=$#log_files+1; $id++){

or
Code:
for ( $id = 0; $id <=scalar(@log_files); $id++){

# 3  
Old 03-25-2009
or using more efficient perl style loops:

Code:
for my $id (0 .. $#log_files){

# 4  
Old 03-26-2009
Thanks

It works as..
for ( $id = 0; $id <=$#log_files+9; $id++){
# 5  
Old 03-26-2009
Quote:
Originally Posted by tukuna82
It works as..
for ( $id = 0; $id <=$#log_files+9; $id++){
Thats quite odd, because that takes you past the end of the array. Why are you adding 9 to the last index?
# 6  
Old 03-26-2009
Hi,

Can you please check it again? I am not able to understand how $#log_files+9 is working Smilie

Last edited by vikalp; 03-26-2009 at 02:51 AM.. Reason: for better understanding
# 7  
Old 03-26-2009
Code:
#!/usr/bin/perl

use strict;
my $server       = "vsacentral";
my $dt           = `date +%D`;
my $dt1          = `date +%b" "%d`;
my $id           = "";
my @cron_scripts = qw{  wms_vsa_load.ksh
  visteon_vsa_load.ksh
  philmor_vsa_load.ksh
  ing_vsa_load.ksh
  franklin_vsa_load.ksh
  fluor_vsa_load.ksh
  dow_vsa_load.ksh
  disney_vsa_load.ksh
  bp_vsa_load.ksh
  belo_vsa_load.ksh};
my @log_files = qw{     wms_import.log
  visteon_import.log
  philmor_import.log
  ing_import.log
  franklin_import.log
  fluor_import.log
  dow_import.log
  disney_import.log
  bp_import.log
  belo_import.log};

my $str = qq{
<html>
  <body>
    <table align=center style="font-family:verdana;font-size:12px;border:1px solid #000000;">
      <tr>
        <th>Server:$server</th>
        <th>Date:$dt</th>
      </tr>
    </table>
    <table align=center style="font-family:verdana;font-size:12px;border:1px solid #000000;">
      <tr>
        <th>Scheduled Date</th>
        <th>Scheduled Run Time</th>
        <th>Sheduled Job</th>
        <th>Log Date</th>
        <th>Log Time</th>
        <th>Log File</th>
      </tr>
};

for ( $id = 0 ; $id <= $#log_files ; $id++ ) {
    my $s_job     = shift @cron_scripts;
    my $s_runtime = `crontab -l|grep -i $s_job|cut -c 1-5`;
    my $log_file  = shift @log_files;
    my $log_date =
      `ls -l *im*.log|grep -i $log_file|tr -s ' '|cut -d ' ' -f 6-7`;
    my $log_time = `ls -l *im*.log|grep -i $log_file|tr -s ' '|cut -d ' ' -f 8`;
    $str .= qq{
<tr>
<td align=center>$dt1</td>
<td align=center>$s_runtime</td>
<td>$s_job</td>
<td>$log_date</td>
<td>$log_time</td>
<td>$log_file</td>
</tr>};
}
$str .= qq{
    </table>
    <br></br>
  </body>
</html>};
print $str;

Here's the culprit. You're changing the size of the array you want to loop over within the loop. Either save the size of the array before you enter the loop and take that as your final value, or change the parts in red to read
Code:
my $s_job=cron_scripts[$id];
my $log_file=$log_files[$id];


Last edited by pludi; 03-26-2009 at 03:35 AM.. Reason: perltidy'd the source
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Shell Programming and Scripting

Excuting perl script from within a perl script with variables.

Not sure what I am doing wrong here, but I can print the list with no issue. Just a blank screen with the 'do'. #!/usr/bin/perl open FILE, "upslist.txt"; while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; do 'check_snmp_mgeups-0.1.pl -H $1 -C $2'; } ... (1 Reply)
Discussion started by: mrlayance
1 Replies

3. Shell Programming and Scripting

Perl : embedding java script with cgi perl script

Hi All, I am aware that html tags can be embedded in cgi script as below.. In the same way is it possible to embed the below javascript in perl cgi script ?? print("<form action="action.htm" method="post" onSubmit="return submitForm(this.Submitbutton)">"); print("<input type = "text"... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. Shell Programming and Scripting

executing perl script from another perl script : NOT WORKING

Hi Folks, I have 2 perl scripts and I need to execute 2nd perl script from the 1st perl script in WINDOWS. In the 1st perl script that I had, I am calling the 2nd script main.pl =========== print "This is my main script\n"; `perl C:\\Users\\sripathg\\Desktop\\scripts\\hi.pl`; ... (3 Replies)
Discussion started by: giridhar276
3 Replies

5. Shell Programming and Scripting

calling a perl script with arguments from a parent perl script

I am trying to run a perl script which needs input arguments from a parent perl script, but doesn't seem to work. Appreciate your help in this regard. From parent.pl $input1=123; $input2=abc; I tried calling it with system("/usr/bin/perl child.pl $input1 $input2"); and `perl... (1 Reply)
Discussion started by: grajp002
1 Replies

6. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies

10. Shell Programming and Scripting

Perl: Run perl script in the current process

I have a question regarding running perl in the current process. I shall demonstrate with an example. Look at this. sh-2.05b$ pwd /tmp sh-2.05b$ cat test.sh #! /bin/sh cd /etc sh-2.05b$ ./test.sh sh-2.05b$ pwd /tmp sh-2.05b$ . ./test.sh sh-2.05b$ pwd /etc sh-2.05b$ So... (10 Replies)
Discussion started by: vino
10 Replies
Login or Register to Ask a Question