I need to access previous element in array.
I don't see any array. I see an extract from a file with records separated by blank lines.
<snip>
Pattern is PARKSIDE AVE. When I find it, I wont to display the previous line as well, because its one record.
while(<TF>){ if (!/$pattern/i){next;} else{$counter++; print $_[-1]; #here I'm trying to display that previous line without success. print "$counter: $_";} }
Always
use strict; use warnings;
!!
Also, please indent the code properly.
The natural solution is to set the input record separator:
local $/ = ''; while (<TF>) { print if /$pattern/i; }
Read about $/ in "perldoc perlvar".
File example:
#REDIRECT=/net/542/2003q4_2m/db/uca/zone.cfg REDIRECT=/net/542/2003q4_2m/db/uma/zone.cfg
I need to get this path: /net/542/2003q4_2m/db/uca/
while (<ZONECFG>){ next if $_ =~ /^#/; ($path_todb) = $_ =~ /\/.*\//; }
Instead of correct path I've got - 1. It looks like I'm assigning scalar value of $_ to my variable even if I surround path_todb in parenthesis
No, you are not. The parentheses around $path_todb make it be assigned the return value from m// in list context. Have you read about the m// operator in "perldoc perlop"?
"If the /g option is not used, m// in list context returns a list consisting of the subexpressions matched by the parentheses in the pattern, i.e., ($1, $2, $3...). (Note that here $1 etc. are also set, and that this differs from Perl 4's behavior.) When there are no parentheses in the pattern, the return value is the list (1) for success."
In other words, there are two possible changes you can do to make it return what you want:
- use the /g modifier, or - use capturing parentheses in the regex
-- Gunnar Hjalmarsson Email: http://www.gunnar.cc/cgi-bin/contact.pl
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>