From: "Paul Kraus" <[EMAIL PROTECTED]>
> I have two subroutines that are have unexpected results. The first is
> passed an array ref to a list of file names. It then calls a
> subroutine and passes a file name to that subroutine. When that
> routine finishes everything in the @files that was passed to point is
> changed from a file name to the relevant line matched by the reg exp
> in the subroutine point. All the other files that where in the array
> are now empty.
>
>
> sub processdate {
> <code snipped>
>
> foreach ( @files ){
>
> if ( /_\((\d+)\)_/ ) {
> print "$_\n";
> <code snipped>
> }
> }
> <code snipped>
> }
>
> sub point {
> my $filename = shift;
> open ( IN, "<$$filename" ) or die "Could not open file $filename
> $!\n";
> while ( <IN> ) {
> return formatnum( $1, $2 ) if ( /Point Health
> Centers\s+((?:\d+,)?(?:\d+\.)?\d+)(-?)/ );
> }
> }
Just the other day someone asked why does someone localize $_ ...
Notice that both loops, the foreach() in processdate() and the
while() in point() use the $_. I believe foreach does locaize the
variable, but while() does not.
Add
local $_;
into the point() and you should be fine.
Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]