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. |