You could have, but you would have had to have had the entire file in
$status. You could have achieved this by
{ #create a new scope
local ($/) = undef; #set line seperator to slurp mode
open TAIL, "tail $glmiss_log|")
or die "Can't tail on $glmiss_log:$!\n";
$status = <TAIL>; #read all lines into $status
close TAIL;
} # $/ goes back to normal here
However, this still would probably not be what you want as there are
many failures in the log that you don't want to match against. I am
only including the code here for educational purposes.
On 26 Jun 2001 11:56:02 -0500, Tom Yarrish wrote:
> Chas,
> Thanks, that fixed it (the tail -1). Could I also have put a g at the end
> of the regex?
>
> Thanks,
> 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;eval
>
> On 26 Jun 2001, Chas Owens wrote:
>
> > On 26 Jun 2001 10:23:13 -0500, Tom Yarrish wrote:
> > > Well, if the tail filehandle acts like a regular tail on the command line,
> > > then no. The first line in the tail does not contain the pattern, the
> > > second line does. Here's what the tail on that log looks like:
> > >
> > > INFOR 05:02:00 AuthData=()
> > > WARNG 05:02:00 VCI_Login : TECH_VCI_ERROR 00120 - EXCHANGE SERVICE NOT
> > > AVAILABLE
> > > INFOR 05:02:05 Login asked for 090CHSIM001
> > > INFOR 05:02:05 Traite_Login() MessGl->authorizationDataLength=24
> > > INFOR 05:02:05 AuthData=()
> > > WARNG 05:02:05 VCI_Login : TECH_VCI_ERROR 00120 - EXCHANGE SERVICE NOT
> > > AVAILABLE
> > > INFOR 05:02:10 Login asked for 090CHSIM001
> > > INFOR 05:02:10 Traite_Login() MessGl->authorizationDataLength=24
> > > INFOR 05:02:10 AuthData=()
> > > WARNG 05:02:10 VCI_Login : TECH_VCI_ERROR 00120 - EXCHANGE SERVICE NOT
> > > AVAILABLE
> > >
> > > (yes, my mail program word wrapped it)
> > >
> > > I opted not to do a tail -f, because if the service isn't available, it
> > > will just keep repeating the lines. What I'm hoping to do (eventually) is
> > > check this right after it starts up for the day.
> > >
> >
> > The first line out of TAIL doesn't match /SERVICE NOT AVAILABLE/ so the
> > else clause is run which should print "Service is connected." and exit
> > the program. I think what you want to do is to
> >
> > #tail -1 gets the last line of the file
> > open (TAIL, "tail -1 $glmiss_log|") or die "Can't tail on $glmiss_log:
> > $!\n";
> >
> > 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;
> > }
> >
> > or
> >
> > #tail -f reads from the file adding more lines every 1 second
> > open(TAIL, "tail -f $glmiss_log|") or die "Can't tail on $glmiss_log:
> > $!\n";
> >
> > while (my $status = <TAIL>){
> > if ($status =~ /WHATEVER EXCHANGE SAYS WHEN IT IS STARTED/){
> > print "Service is connected.\n";
> > $fix = 0;
> > exit;
> > } else {
> > print "Service not running, attempting to start.\n";
> > print "This may take a few minutes.\n";
> > $fix = 1;
> > }
> > }
> >
> >
> > --
> > Today is Boomtime, the 31st day of Confusion in the YOLD 3167
> > Kallisti!
> >
> >
> >
> >
>
>
--
Today is Boomtime, the 31st day of Confusion in the YOLD 3167
Or not.