in reply to uninitialized value error
You push $1 onto @array (push (@array, $1);) regardless of getting a match in the previous regex. Unless the last matching line in your file is a well formed $lastPhrase line, your code as it stands will fail as you have noted.
The following test code illustrates the problem:
use strict; use warnings; use List::Util qw{first}; my $file = <<FILE; total rejected recors: 10 FILE my @phrases = ( "total rejected rows:", "total rejected recors:", "rejectb:", "total rejected rows:" ); open my $inFile, '<', \$file; my @newarray = search_phrase ($inFile, @phrases); close $inFile or die qq{close: $!\n}; $newarray[$#newarray] =~ s/\s+//g; if (@newarray && $newarray[$#newarray] > 0) { print "$newarray[$#newarray]\n"; } else { print "-1\n"; } sub search_phrase { my ($inFile, @phrases) = @_; my @array; my $lastPhrase = $phrases[-1]; my @lines = <$inFile>; foreach my $phrase (@phrases) { # Find the first match in the remaining lines for the current +phrase my $lineNo = first { $lines[$_] =~ /\Q$phrase\E/ } 0 .. $#line +s; next unless defined $lineNo; # No line containing current phra +se print "Found: $lines[$lineNo]" if ($lines[$lineNo] =~ m{\Q$lastPhrase\E\s*(\d+)}); push (@array, $1); $lineNo++; splice @lines, 0, $lineNo; # Delete processed lines } return @array; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: uninitialized value error
by mercuryshipz (Acolyte) on Jan 31, 2008 at 15:40 UTC |