[tpm] Pub discussion (2)
Alex Beamish
talexb at gmail.com
Thu Aug 28 21:05:42 PDT 2008
Further to my last, there was some discussion that passing numbered
regexp parameters to a subroutine, and then doing a further regexp
would pollute $1 and cause its value to change.
My test code:
#!/usr/bin/perl -w
#
# Another example. Does
#
# t($1,$2)
#
# sub t
# {
# my $a = shift;
# m/(...)/;
# return ($a);
# }
#
# mean that $a now contains the new value of $1 because there's a new $1
# value?
use strict;
{
my $line = "The quick brown fox jumped over ..";
my ( $noun, $verb ) = ( $line =~ m/(\w+) (j\w+)/ );
print "Noun is $noun, verb is $verb.\n";
print "Noun is $1, verb is $2.\n";
my $return = t($1, $2);
print "The return value is $return.\n";
}
sub t
{
my $abc = shift;
my $foo = "This is the last line of the test.";
my ( $prep ) = ( $foo =~ /(th\w)/ );
print "OK, \$1 is $1 and abc is $abc.\n";
# Since the first parameter passed into this subroutine was $1, the
# hypothesis is that by collecting a new $1, we will overwrite the
# original value of $abc.
return ( $abc );
}
Running this script produces
[alex at foo tpm-August2008]$ perl -w regexp.pl
Noun is fox, verb is jumped.
Noun is fox, verb is jumped.
OK, $1 is the and abc is fox.
The return value is fox.
I would say that the hypothesis is disproved, unless I've
misunderstood the example as it was presented to me. Corrections and
clarifications gladly welcomed.
--
Alex Beamish
Toronto, Ontario
aka talexb
More information about the toronto-pm
mailing list