[EMAIL PROTECTED] wrote:
Hi all,

Hello,

Serious noob here (one week into llama 5th ed.).

I'm trying to write a script to pull a specific file from a directory
and search that file for specific phrases. I am having a problem
searching for the file in the directory. If I type in the actual file
name (line 26) I can find the phrase file.zip (line 30). Obviously,
this will only work once. If I use a variable to search for a file I
get nothing. What is the proper format for line 26?    I can't use
File::Find so please don't suggest it.  Thx.

Why can't you use File::Find? And why would you want to use it for this application?


 #!/usr/bin/perl

    use warnings;

  2 use strict;
  3
  4 my $Log_Dir;
  5 my $file;
  6 my $Date;
  7 my $File_Name;
  8 my @array;
  9 my $file_name;

Why are you declaring all your variables here?

 11 $Log_Dir = "/var/log/apache/";
 12 opendir DH, $Log_Dir or die "Cannot open $Log_Dir: $!";
 13 while ($file = readdir DH){
 14         push(@array, $file);
 15         }

Why the while loop?

   my @array = readdir DH;

Why is the array named "array"?

 17 closedir DH;
 18
 19 $Date = `date --date=yesterday +%Y%m%d0000-2400-0`;

Assuming today's date is 21 Oct. 2008, $Date will now contain the string "200810200000-2400-0\n"

perldoc -q "How do I find yesterday.s date"

 20 # The file name always starts with file111-11-23.abctyu_X but the
time stamp changes daily (predictable)
 21 # Example Filename: file111-11-23.abctyu_X.200810200000-2400-0

It looks like your file name does not have a "\n" at the end?

 22 $File_Name = "file111-11-23.abctyu_X.$Date";
 23 print $Date;
 24 foreach $file_name (@array){
 25         chomp;

Why are you chomp()ing $_?

 26         if ($file_name =~ /$File_Name/){

Why use a regular expression?

              if ( $file_name eq $File_Name ) {

 27                 open LOGFILE, $File_Name;

You should *always* verify that the file opened correctly.

 28                 while (<LOGFILE>){
 29                         #Search log file for the word file.zip
 30                         if(/file.zip/){

The . character in a regular expression matches every character (except newline) so you have to escape it to match a literal . character:

                              if ( /file\.zip/ ) {

 31                         print "$_\n";
 32                         }
 33                 }
 34         }
 35 }

You are reading all the file names from a directory to find a file that you already know the name of. You probably want some like this instead:

#!/usr/bin/perl
use warnings;
use strict;

my $log_dir = '/var/log/apache';
chomp( my $yesterday = `date --date=yesterday +%Y%m%d` );
my $file_name = "$log_dir/file111-11-23.abctyu_X.${yesterday}0000-2400-0";

open my $LOGFILE, '<', $file_name or die "Cannot open '$file_name' $!";

while ( <$LOGFILE> ) {
    #Search log file for the word file.zip
    print if /file\.zip/;
    }

__END__



John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to