in reply to Re: Re: m//g behaves strange...
in thread m//g behaves strange...
You are very close to 100% right. However I do observe something else, and I don't let things escape easily.
If I do this:
use strict; use warnings; { $_ = "1234"; my $ret = /2/g; print "($ret)\n" } { $_ = "1234"; my $ret = /9/g; print "($ret)\n" }
The outputs are 1 and "empty string", which indicate that you are right.
However, try this:
use strict; use warnings; { my $a = 0; print "(" . ~$a . ")\n"; } { my $a = 1; print "(" . ~$a . ")\n"; } { my $a = ""; print "(" . ~$a . ")\n"; }
It returns:
(4294967295) (4294967294) ()
Remeber the return values for zero and empty string, and then try this:
use strict; use warnings; { $_ = "1234"; my $ret; print ~ m/2/, "\n"; } { $_ = "1234"; my $ret; print ~ m/9/, "\n"; }
It gives you:
4294967294 4294967295
Which indicates the "~" operator does receive 0, not "empty string". Rememebr that in the case that we explicitly pass "~" an empty string, it is not converted to 0
However, if we do this:
use strict; use warnings; { $_ = "1234"; my $ret; print ~ ($ret = m/2/), "\n"; print "($ret)\n"; } { $_ = "1234"; my $ret; print ~ ($ret = m/9/), "\n"; print "($ret)\n"; }
You get:
4294967294 (1) 4294967295 ()
It seems that although $ret receives "empty string", "~" operator receives 0, again rememebr that we didn't see this kind of auto-convertion in the explicitly-passing-empty-string case.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: m//g behaves strange... (!1)
by tye (Sage) on Nov 10, 2003 at 05:50 UTC | |
by !1 (Hermit) on Feb 26, 2004 at 18:59 UTC | |
by tye (Sage) on Feb 26, 2004 at 19:19 UTC | |
by pg (Canon) on Nov 10, 2003 at 06:27 UTC | |
by Anonymous Monk on Nov 10, 2003 at 06:54 UTC | |
by ysth (Canon) on Nov 10, 2003 at 07:14 UTC | |
by tye (Sage) on Nov 10, 2003 at 15:34 UTC |