If tr doesn't use patterns then please help me understand how it works
in my test cases?
btw a straight swap to s/// fails for true == 1 but works for true ==
'foo'.
#!/usr/bin/perl
for (1,'foo',0) {
$a = $_;
test();
test();
}
sub test {
print "$a ";
if ($a=~tr/.[^0]+/0/cs) { do_something(); }
print "$a\n";
}
sub do_something {
print " -> ";
}
output:
1 -> 0
0 0
foo -> 0
0 0
On Wed, 22 May 2002, Yanick wrote:
> On Wed, May 22, 2002 at 10:06:39PM -0400, Josh Goldberg wrote:
> > I came up with another one. This also works for values of true other
> > than 1.
> >
> > if ($a=~tr/.[^0]+/0/c) { do_something(); }
>
> s/tr/s/, maybe ?
>
> (the transliterate operator doesn't use patterns, so
> the code above change every instances of '.' by a 0,
> of '[' by a '[' and so on and so forth...)
>
>
> Joy,
> `/anick
>
> --
> On the whole, human beings want to be good,
> but not too good, and not quite all the time.
> -- George Orwell
>