Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: How to assign string "0" in short circuit

by saberworks (Curate)
on Feb 05, 2008 at 04:56 UTC ( [id://666208]=note: print w/replies, xml ) Need Help??


in reply to How to assign string "0" in short circuit

None of the code shown so far matches the original. When you shift off @_, it actually removes the value, allowing you to use the rest of @_ at your leisure.
#!/usr/bin/perl use warnings; use strict; sub function1 { my $var = defined $_[0] ? shift : 'No argument'; print "$var\n"; } function1('zero'); function1(0); function1('0'); function1(0e0); function1('foolio'); function1();

Replies are listed 'Best First'.
Re^2: How to assign string "0" in short circuit
by nikhil.patil (Sexton) on Feb 05, 2008 at 06:46 UTC
    Thank you all for your suggestions. Finally I used the following code to solve the problem:
    sub function1 { my $var = defined $_[0] ? shift : 'No argument'; print "$var\n"; }
    But I still wonder if we cannot assign string value "0" to a variable using short circuit.

    // works well, but that is in Perl 5.10.0. What if we have a situation like the following (in Perl 5.8.8), where we have multiple expressions involved in the short circuit in order of preference:
    my $var = $hash1{$name} || $hash2{$name} || $some_default_value;
    This will assign the default value to $var if say the key $name is not defined in %hash1 and is assigned a value 0 in %hash2. Is a if-elsif ladder or complex nested ternary operators the only way to solve this? Or may be this is the reason why they came up with // in Perl 5.10.0
      Short circuit operators always evaluate in boolean context. In boolean context there are only true and false. The string "0" and numberic 0 are, among others, false. But, 0 (or empty string) is defined. So you need to check for defined-ness to allow them. See True or False? A Quick Reference Guide.

      Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2024-04-24 05:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found