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

ternary operator

by Anonymous Monk
on Jan 18, 2013 at 06:27 UTC ( #1013961=perlquestion: print w/ replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

 $a1=2; $b1=10; (defined($a1 > $b1)) ? ($int = ($a1/$b1)) : ($int = ($b1/$a1)); print $int;

wats wrong with this code?

Comment on ternary operator
Select or Download Code
Re: ternary operator
by BrowserUk (Pope) on Jan 18, 2013 at 06:44 UTC

    Everything!


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    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.
Re: ternary operator
by davido (Archbishop) on Jan 18, 2013 at 06:54 UTC

    Obviously, it's not using strict. ;)


    Dave

Re: ternary operator
by tmharish (Friar) on Jan 18, 2013 at 06:55 UTC
    Short Answer:
    $a1=2; $b1=10; ($a1 > $b1) ? ($int = ($a1/$b1)) : ($int = ($b1/$a1)); +print $int;
    Better Short Answer:
    $a1=2; $b1=10; $int = ($a1 > $b1) ? ($a1/$b1) : ($b1/$a1); print $int;
    What it should really be:
    use strict ; use warnings ; # Use Better Variable Names. my $a1 = 2 ; my $b1 = 10 ; my $int = ( $a1 > $b1 ) ? ( $a1 / $b1 ) : ( $b1 / $a1 ) ; print $int;
    Reasoning:

    defined($int = ($a1/$b1)) will always evaluate to true regardless of the values of $a1 and $b1. If you want to check if both $a1 and $b1 are defined you might want to nest it in there like:
    my $int = ( defined( $a1 ) and defined( $b1 ) ) ? ( ( $a1 > $b1 ) ? ( +$a1 / $b1 ) : ( $b1 / $a1 ) ) : die( '$a1 and $b1 need to be defined' + ) ;
    The other thing to note is that the the Ternary Operator, being an Operator, will return something and so you dont need to do the $int = in both the if and else parts.
      Besides checking whether $a1 and $b1 are defined, you'd probably also want to verify that the the smaller value is != 0. By now, we are definitely at the point where insisting on using the ternary operator causes needless issues with readability.
Re: ternary operator
by AnomalousMonk (Abbot) on Jan 18, 2013 at 09:39 UTC

    Not enough parentheses.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (14)
As of 2014-12-19 09:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (76 votes), past polls