I'm a bit confused because when overload is triggered, it appears to be passing 'undef':
#!/usr/local/bin/perl + package SomeClass; use Data::Dumper; + use overload '""' => \&name; sub new { return bless {}, shift; } + sub name { print Dumper \@_; my $self = shift; $self->{NAME} = shift if @_; return $self->{NAME}; } + package main; my $thing = SomeClass->new; $thing->name('TestObj'); print "Implicit: my name is $thing\n";
That gives the following output:
$VAR1 = [ bless( {}, 'SomeClass' ), 'TestObj' ]; $VAR1 = [ bless( { 'NAME' => 'TestObj' }, 'SomeClass' ), undef, '' ]; Implicit: my name is
We can clearly see 'undef' is being passed and that's what's throwing off your conditional. This is so counter-intuitive that I assume I'm missing something, though a quick scan through the docs doesn't reveal what that would be.
Cheers,
Ovid
New address of my CGI Course.
In reply to Re: Overloading oddity
by Ovid
in thread Overloading oddity
by theguvnor
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |