Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Class::Std :default semantics

by esharris (Monk)
on Oct 26, 2005 at 19:29 UTC ( #503142=perlquestion: print w/replies, xml ) Need Help??
esharris has asked for the wisdom of the Perl Monks concerning the following question:

The attribute specification :default('') didn't work as expected . Here is my program.
#!/usr/bin/perl -w package Foo; { use Class::Std; my %a : ATTR( :default('') :get<a>); }; my $f = Foo->new(); print ref($f), "\n"; if (defined($f->get_a())) { print "yes\n"; } else { print "no\n"; } if ($f->get_a() eq '') { print "yes\n"; } else { print "no\n"; } package Bar; { use Class::Std; my %a : ATTR( :default('''') :get<a>); }; my $g = Bar->new(); print ref($g), "\n"; if (defined($g->get_a())) { print "yes\n"; } else { print "no\n"; } if ($g->get_a() eq '') { print "yes\n"; } else { print "no\n"; } print "Hello\n"; if (undef eq '') { print "yes\n" } else { print "no\n"; }
When executed, this perl script gives the following output.
./ Foo no Use of uninitialized value in string eq at ./ line 14. yes Bar yes yes Hello Use of uninitialized value in string eq at ./ line 31. yes
Based on the explanation of Class::Std in CPAN, I expected $f->get_a() to be the null string. However, according to the 2nd and 3rd line of output, it is actually undefined.

I have a conjecture. If you look at the source, you see that the given default value is first evaluated, after the string delimiters are removed. in the Foo case, eval '' returns normally with the undefined value. To initialize the hash bucket to the null string in Goo, I had to do :default(''''). Is this a bug?

Replies are listed 'Best First'.
Re: Class::Std :default semantics
by TheDamian (Priest) on Oct 27, 2005 at 10:33 UTC
    Yep. It's a bug. Fixed in the next release. Thanks for the report.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://503142]
Approved by Limbic~Region
Front-paged by planetscape
[Discipulus]: M4ver1k are you debug/dump vars in the loops? are you sure you are not quitting the loop earlier?
[Corion]: A good weekstart to everybody!
[Discipulus]: good morning nuns and monks! hello Corion

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2017-11-20 08:05 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (285 votes). Check out past polls.