Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^3: Parsing your script's command line

by JadeNB (Chaplain)
on Sep 07, 2008 at 20:16 UTC ( #709681=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Parsing your script's command line
in thread Parsing your script's command line

This is because $thing could be defined but zero and we don't want to overwrite a perfectly valid zero from the command line.
As Not_a_Number points out, the syntax EXPR unless defined $thing will do nothing at all * if $thing is defined, whether it's true or false. That is, if we are executing EXPR, then $thing is guaranteed undefined, hence false; so $thing ||= 'default' is guaranteed to be the same as $thing = 'default'.

It seems reasonable to guess that what happened is that the coder originally had $thing ||= 'default' in some old code, discovered (as you mention) that it doesn't work when $thing is false-but-defined, and added the defined check without realising that it made ||= redundant.

Of course, a mere five years later, we have the wonderful //= (C style Logical Defined Or) instead to save us this pain.

UPDATE (the *'d statement above—sorry, I don't know how to do footnotes): On further thought, it's not quite true that EXPR unless defined $thing will do nothing if $thing is defined. Among what I suppose are many other subtle cases, if the unless is the last line in a subroutine, it'll make the subroutine return 1 when $thing is defined. For example, after

our $a = 1; sub b { 0 unless defined $a } sub c {} my $b = b; my $c = c;
we have that $b = 1 but $c is undefined.


Comment on Re^3: Parsing your script's command line
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (7)
As of 2015-07-08 02:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls