On May 31, Lance Prais said:

>There are a couple of problems that I am having:
>1.     The script is never ending.  I though "while (1)" is the right way to
>do this.

The script never ends because you're using 'while (1) { ... }'.  That goes
on forever.  You'll have to tell Perl to stop manually.

>2.     Every time it runs I get the follow error it never opens another
>outlook.txt file.  so the script continues to read the same txt over and
>over again.
>               The process cannot access the file because
>               it is being used by another process.

Perhaps you should consider CLOSING filehandles that you open.

>#/usr/bin/perl
>
>while (1)
>{
>#      RUN EVERY 10 SECONDS
>       sleep 10;
>       $cmd="";

That's pointless.

>       $cmd = '..\\..\\srvrmgr /g apollo.ts.checkpoint.com /e CHK_ENT_PRD /s
>CHK_SBL_PRD /u xxxxxxxxx /p xxxxxxxxxx /c "list tasks for server CHK_SBL_PRD
>component Email Manager" > ..\\..\\outlook.txt';
>       $result = `$cmd`;                       # note back-ticks

Why not just

  $result = `..\..\srvrmgr /g ...`;

Why are you using a variable?

>
>#      OPEN A FILE WITH THE FILEHANDLER
>       open OUTLOOK, "+<..\\..\\outlook.txt"  or die "Cannot open email manager

Why are you using "+<" instead of just "<"?  You're not WRITING to the
file, so there's no need for the "+".

>$!\n";
>
>#      THIS WILL PUT YOU AT ROW 23.----
>       for(my $i=0; $i<22; $i++){<OUTLOOK>};
>       $_=<OUTLOOK>;

You should close the filehandle now.

>       my $line=$_;

This is pointless.

>       print  "substr($line, 106, 22)\n";

Do you really want to have substr(...) inside the quotes?

  print substr($line, 106, 22), "\n";

>#      OPEN LOG TO TRACK
>       open (APPEND, ">>siebel_mail.log") or die "$! error trying to append";
>        print APPEND "substr($line, 106, 22)\n";

You should close the filehandle now.

>}


Here's a rewrite:

  #!/usr/bin/perl -w

  use strict;

  open MAIL_LOG, ">> siebel_mail.log" or
    die "can't append to siebl_mail.log: $!";

  # do this 6 times
  for (1 .. 6) {
    open OUTPUT, '..\\..\\srvrmgr /g apollo.ts.checkpoint.com /e CHK_ENT_PRD /s 
CHK_SBL_PRD /u xxxxxxxxx /p xxxxxxxxxx /c "list tasks for server CHK_SBL_PRD component 
Email Manager" |' or
      die "can't run srvrmgr: $!";
    <OUTPUT> for 1 .. 22;  # skip first 22 lines of output
    my $line = substr <OUTPUT>, 106, 22;
    close OUTPUT;

    print $line, "\n";
    print MAIL_LOG $line, "\n";

    sleep 10;
  }

  close MAIL_LOG;

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
[  I'm looking for programming work.  If you like my work, let me know.  ]


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to