in reply to Ternary operators: a hinderance, not a help

update: the indented block is irrelevant now, with the update in the OP
Your examples are not equivalent. Your "if" case should look something like this:
my $number = do { if ($logical_test) { $value } else { 0 } }

Note that there is no automatic assignment of the 0 value. Doesn't make much difference here, ofcourse, but for more complicated cases its possible that those assignments have side-effects, or just take a lot of time.

Anyway, I would not recommend using ?: in very complex statements, because the ? and : tend to get drowned. But then, I would not recommend using statement modifiers in such a case either:

$bla = $some_really_long_calculation_that / $you_just_don_t * $want_to +_read_all_the_way_to_the_end if $something;

Replies are listed 'Best First'.
Re^2: Ternary operators: a hinderance, not a help
by Tanalis (Curate) on Aug 09, 2005 at 15:47 UTC
    I .. wouldn't have written the if that way, either, though .. :)

    I've changed the example in the OP to make it clearer - thanks :)

        As an aside: in Ruby where if is an expression not a statement you can write something very close without all the extraneous squiggles.

        number = if logical_test value else 0 end

        Not to mention case is also an expression and can be used similarly.

        zerg = case foo when "bar" Hydralisk.new when "baz" more_creep() else raise "Too few Starcraft references" end

        --
        We're looking for people in ATL