Ok, here are a few things you need to concider:

you are matching in caps and literally that... if it's on multiple lines or
if it's lower case or...
anyway, try this: /SERVICE NOT AVAILABLE/i; #that will ignore case

double check that that is REALLY what you want to match... try a print out
or so like this:
while (my $status = <TAIL>){
    print "FOO: $status\n";

and see what it prints

next, you dont want to put [] around your regexp.. that's for character
classes and not at all what you want here
(take a look at www.sharemation.com/~perl/tut for some tutorials about this)

last, you dont want to use 'exit' in that else statement, seeing that will
not only exit the loop, but will exit the entire program
you're probably looking for 'last'

hth,

Jos BOumans

you are matching
----- Original Message -----
From: "Tom Yarrish" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, June 25, 2001 9:13 PM
Subject: My mis-understanding of if/else?


> Hey all,
> Okay, I'm still working on my little Net::Telnet project, but a different
> section of the code is giving me a problem.  I thought I had an
> understanding of regex an if/else, but apparently not.
> Here's the code snippet:
>
>
>
> open(TAIL, "tail $glmiss_log|") or die "Can't tail on $glmiss_log: $!\n";
>
> while (my $status = <TAIL>){
>         if ($status =~ /SERVICE NOT AVAILABLE/){
>                 print "Service not running, attempting to start.\n";
>                 print "This may take a few minutes.\n";
>                 $fix = 1;
>         } else {
>                 print "Service is connected.\n";
>                 $fix = 0;
>                 exit;
>         }
> }
>
> Okay, the $glmiss_log points to a logfile, and for test purposes I'm using
> one that has the "Service not available" error at the end of it.  So the
> first part of the if statement should pick it up.  Here's what the error
> looks like in the log:
>
> WARNG 05:02:10 VCI_Login :   TECH_VCI_ERROR 00120 - EXCHANGE SERVICE NOT
> AVAILABLE
>
> Now if I put [] around the regex, it matches it, but without it skips and
> goes right to the else statement.  Do I need to put any pattern matching
> for the rest of the line?  I basically just need it to see this error
> (which if there's a problem will be the last line in the log file) and
> then I have it do something once it exits the loop.
>
> Thanks ahead of time,
> Tom
>
>
> --
> #!/usr/bin/perl -w # 526-byte qrpff, Keith Winstein and Marc Horowitz
> <[EMAIL PROTECTED]> # MPEG 2 PS VOB file on stdin -> descrambled output
> on stdout # arguments: title key bytes in least to most-significant order
>
$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5;
>
$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d=
> unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d
> >>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9
> ,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t
>
^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271)
)
>
[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eva
l
>
>

Reply via email to