sub explain {
my $val = shift;
print "Numeric value = ", 0+$val, "\n";
print "String value = \"$val\"\n";
print "Truth value = ", $val ? "true\n" : "false\n";
}
####
# explain("23skidoo");
Numeric value = 23
String value = "23skidoo"
Truth value = true
# explain(1_2_3);
Numeric value = 123
String value = "123"
Truth value = true
# explain("1_2_3");
Numeric value = 1
String value = "1_2_3"
Truth value = true
# explain("00");
Numeric value = 0
String value = "00"
Truth value = true
# explain("0");
Numeric value = 0
String value = "0"
Truth value = false
# explain(undef);
Numeric value = 0
String value = ""
Truth value = false
##
##
[robin@robin robin]$ perl -wle 'print 0+"23skidoo"'
Argument "23skidoo" isn't numeric in addition (+) at -e line 1.
23
##
##
[robin@robin bits & pieces]$ perl -wle 'print 23+"0 but true"'
23
##
##
# explain([1,2,3]);
Numeric value = 25616
String value = "ARRAY(0x6410)"
Truth value = true
##
##
my $foo = *bar;
our $bar = "hello\n";
our @bar = ("Hello again!\n");
print $$foo, @$foo;
explain($foo);
##
##
hello
Hello again!
Numeric value = 0
String value = "*main::bar"
Truth value = true
##
##
# explain(bless {}, "SomePackage");
Numeric value = 25616
String value = "SomePackage=HASH(0x6410)"
Truth value = true
##
##
explain(bless {}, "SomePackage");
package SomePackage;
use overload '""' => sub {'string value'};
use overload '0+' => sub {23};
use overload 'bool' => sub {""};
use overload fallback => 1;
##
##
Numeric value = 23
String value = "string value"
Truth value = false
##
##
Numeric value = 0
String value = "string value"
Truth value = true
##
##
explain(bless {}, "SomePackage");
package SomePackage;
use overload '""' => sub {''};
use overload '0+' => sub {23};
use overload fallback => 1;
##
##
Numeric value = 23
String value = ""
Truth value = true
##
##
explain(bless {}, "SomePackage");
package SomePackage;
use overload '""' => sub { '' };
use overload '0+' => sub {'00'};
use overload fallback => 1;