A few days ago, I was helping a co-worker debug a Perl program. In the process of doing this, we found a bit of behavior that seemed odd. Here's a minimal program to reproduce what we saw.
--------- f1.pl -------------------------
use strict;
use warnings;
my $line = "hello world\r";
print "\t<" . ("tri state airport" =~ m//) . ">\n";
$line =~ s/\r//gs;
print "\t<" . ("tri state airport" =~ m//) . ">\n";
exit 0;
-----------------------------------------
The output consists of two lines, where the result of
("tri state airport" =~ m//)
is placed within angle brackets. Each print statement gives a
different answer.
$ perl f1.pl
<1>
<>
The first line indicates that "tri state airport" matches the empty
string (which I agree with); the second line indicates that "tri state
airport" does not match the empty string.
With a slight alteration (changing s/// to tr///), we get a different
result.
--------- f2.pl -------------------------
use strict;
use warnings;
my $line = "hello world\r";
print "\t<" . ("tri state airport" =~ m//) . ">\n";
$line =~ tr/\r//d;
print "\t<" . ("tri state airport" =~ m//) . ">\n";
exit 0;
-----------------------------------------
$ perl f2.pl
<1>
<1>
(Here, "tri state airport" matches the empty string both times.)
Is s/// supposed to behave this way?
This behavior appears in Perl 5.8.6 (Mac OS X 10.4.11) and Perl 5.8.8
(Mac OS X 10.5.6, Centos 5.2, and Ubuntu lenny).
Steve
pgpYccLTN6T9F.pgp
Description: PGP signature
_______________________________________________ Boston-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/boston-pm

