Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: RFC: New style for argument check in subs

by Jenda (Abbot)
on Sep 05, 2012 at 11:30 UTC ( #991812=note: print w/ replies, xml ) Need Help??


in reply to RFC: New style for argument check in subs

"missing" ne "undefined"!

An undef may very well be the value you want to specify! There is a big difference between foo({bar => 15, baz => undef}) and foo({bar => 15}) and I would definitely not expect to get the default value of baz in the first case.

Jenda
Enoch was right!
Enjoy the last years of Rome.


Comment on Re: RFC: New style for argument check in subs
Select or Download Code
Re^2: RFC: New style for argument check in subs
by LanX (Canon) on Sep 05, 2012 at 11:41 UTC
    As I already said, accepting undef as valid argument is such a special and rare case that it should be covered by another approach. (see footnotes in OP)

    Here using ternaries is far more explicit and shows that a special argument undef is accepted.

    my $a = exists $arg{a} ? $arg{a} : 'else case';

    But I agree that it's better to name the error die('Undefined argument!') instead of 'Missing argument' to avoid such misunderstandings.

    Cheers Rolf

      Not rare at all! Both as unnamed and as named parameter used in DBI + DBD::CSV:

      use DBI; my $dbh = DBI->connect ( "dbi:CSV", # Unnamed, driver undef, # Unnamed, username undef, # Unnamed, password { f_ext => ".csv/r", # Named and defined f_schema => undef, # Named and undefined });

      FWIW all NULL values in a database are refered to through undef, so you'll see a lot of those in both named and unnamed arguments to functions and methods.


      Enjoy, Have FUN! H.Merijn
        Good point.

        But in those cases checks for existence should be explicit.

        UPDATE: You convinced me that

        *** Unpack Named First

        is a danegrous option. Thanks :)

        Cheers Rolf

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://991812]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (9)
As of 2014-08-22 23:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (168 votes), past polls