Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^4: Correct idiom for default parameters

by LanX (Saint)
on Apr 28, 2010 at 22:50 UTC ( [id://837404]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Correct idiom for default parameters
in thread Correct idiom for default parameters

careful!

passing undef in between will break your idiom.

IMHO better check scalar @_ or care explicitly about passing undef !

sub defaults { my( $p1, $p2, $p3) = map{ defined $_[0] ? shift : $_ }( 1, 2, 3 ); + print "p1:$p1; p2:$p2; p3:$p3\n"; }; defaults(undef, 0, 0);

Cheers Rolf

Replies are listed 'Best First'.
Re^5: Correct idiom for default parameters
by BrowserUk (Patriarch) on Apr 28, 2010 at 22:59 UTC

    Sorry, I don't follow?

    Passing undef gives exactly the effect I would expect and desire. That of accepting the default for that parameter:

    test( 'a', undef, 'c' );; p1:a; p2:2; p3:c

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      well, thats not the result I get:

      sub defaults { my( $p1, $p2, $p3) = map{ defined $_[0] ? shift : $_ }( 1, 2, 3 ); + print "p1:$p1; p2:$p2; p3:$p3\n"; };; defaults('a', undef, 'c');

      p1:a; p2:2; p3:3

      $p3 ne 'c'

      the first undef value omits the shift, all following parameters will be replaced by defaults! You need an explicit shift after the colon!

      Cheers Rolf

        Arg! You're right. I tried it against my 5.10 version, because it was sitting there at the command prompt:

        sub test{ my($p1,$p2,$p3) = map shift // $_,(1,2,3); print "p1:$p1; p2:$p2; p3:$p3"; };; [0] Perl> test();; p1:1; p2:2; p3:3 [0] Perl> test( 'a', 'b', 'c' );; p1:a; p2:b; p3:c [0] Perl> test( 'a', , 'c' );; p1:a; p2:c; p3:3 [0] Perl> test( 'a', undef, 'c' );; p1:a; p2:2; p3:c

        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (7)
As of 2024-04-23 11:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found