in reply to Re^2: How to no goto or gosub
in thread How to no goto or gosub

I find that unless() has a very small useful footprint. Sure, may be OK when there is a single condition:

unless ($things_went_wrong) { # do some stuff }

But, when there are multiple conditions, it gets tougher to keep straight:

unless ($result < $HIGHEST_VALUE && ! $bad_results{$result}) { # stuff + }

And then there is this legal, but almost much harder to follow, control structure:

unless ($result) { ## Do some stuff } elsif (!$result) { ## Do some other stuff } else { ## yet other stuff... }

In the end, 'unless(') is just a way to type 'if (!)', but with more keystrokes and it has a better chance of making your brain hurt. And, you never have to worry about decoding double negatives, or re-writing them if your control statements need to grow down the line if you just use 'if (!)'.

Replies are listed 'Best First'.
Re^4: How to no goto or gosub
by johngg (Canon) on Jan 19, 2016 at 15:23 UTC
    And then there is this legal, but almost much harder to follow, control structure:

    I've often wondered how many brains would explode if there was an unless ( ... ) { ... } elsless ( ... ) { ... } else { ... } construct in the language :-)

    Cheers,

    JohnGG

Re^4: How to no goto or gosub
by SimonPratt (Friar) on Jan 19, 2016 at 15:38 UTC

    Yeah, I tend to stay away from elsif. Of course there are exceptions (aren't there always?), but I find that creating a logic flow that depends on lots of elsif calls just encourages people to continue expanding the structure long beyond the point it should have been refactored (case in point - one of our monolithic scripts has something like 30 or 40 chained elsif statements)

    Yes, I agree that unless has a small useful footprint, but I also think that if and elsif (especially the latter) are very easy to abuse.