substr vs regex
Aaron Crane
perl at aaroncrane.co.uk
Mon Sep 3 11:10:25 BST 2007
alex at owal.co.uk writes:
> Imagine, say, someone wanted the last three characters of a
> string. They might use a regex /(...)$/ or substr($variable, -3)
Note that those aren't actually equivalent:
$ cat foo.pl
sub show {
my ($s) = @_;
return "undef\n" if !defined $s;
$s =~ s/\n/\\n/g;
return ">>$s<<\n";
}
for ("foobar\n", "foobar\n\n") {
my ($via_regex) = /(...)$/;
my ($via_substr) = substr $_, -3;
print "\ntarget: ", show($_);
print "via regex: ", show($via_regex);
print "via substr: ", show($via_substr);
}
$ perl foo.pl
target: >>foobar\n<<
via regex: >>bar<<
via substr: >>ar\n<<
target: >>foobar\n\n<<
via regex: undef
via substr: >>r\n\n<<
You can make them equivalent by adding the /m flag to the regex, and
using /\z/ instead of /$/.
> Is one of these significantly more efficient than the other?
I wouldn't worry about the efficiency anywhere near as much as the
readability. And it's hard to say which is more readable without more
context about what your program's doing.
--
Aaron Crane
More information about the london.pm
mailing list