Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Beware $? and END

by Felonious (Chaplain)
on Apr 27, 2002 at 16:51 UTC ( #162532=perlmeditation: print w/ replies, xml ) Need Help??

Recently, I was bitten by a subtle bug. I had a script that I needed to return a value from to indicate success or failure. Simply enough, where I wanted to fail, I used "exit 1". The problem was that my script always returned success. After alot of frustration, it finally hit me what the problem was...
sub END { system("./dosomething"); } exit 1;
exit() will set $? to the supplied value then eventually terminate with that value, but not until it executes the code in the END block. If anything in there sets $? (as system does), it will overwrite the value set by exit. The solution is to make $? local in the END block.
sub END { local $?; system("./dosomething"); }

-- O thievish Night, Why should'st thou, but for some felonious end, In thy dark lantern thus close up the stars? --Milton

Comment on Beware $? and END
Select or Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlmeditation [id://162532]
Approved by ybiC
Front-paged by jptxs
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2015-11-29 01:41 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (746 votes), past polls