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

I'm curious. Every post has suggested either if (not $gas_cost < 1) or if ($gas_cost >= 1). Am I the only one who immediately thought unless ($gas_cost < 1)?

Do I just think strangely, or is unless too unclear for most people to consider using? (or is there some other reason for not using it?)

Replies are listed 'Best First'.
Re^3: How to no goto or gosub
by choroba (Cardinal) on Jan 19, 2016 at 12:36 UTC
    The OP seemed as a beginner question to me. I tried not to introduce unnecessary details. On the other hand, I usually use unless in post-position only, to prevent an else from creeping in.
    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

      Yeah, that makes sense :)

Re^3: How to no goto or gosub
by shilo (Novice) on Jan 19, 2016 at 14:59 UTC

    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 (!)'.

      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

      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.

Re^3: How to no goto or gosub
by Anonymous Monk on Jan 19, 2016 at 09:15 UTC

      Hmm, my personal opinion is that unless $condition is clearer than if !$condition and if $condition is clearer than unless !$condition. Horses for courses, I guess :)

Re^3: How to no goto or gosub
by Discipulus (Canon) on Feb 05, 2016 at 21:44 UTC