in reply to Re^3: perldelta unclear on 'given's fate
in thread perldelta unclear on 'given's fate

Going from that discussion it looks like a good part of 'given's usefulness is centred on smartmatch... Which I don't use in any other way, therefore perhaps 'given' is not all that important after all.

At the end of the day I suppose I would just like a perl 'switch/case/default' because I am very used to that way of thinking and controlling execution.

  • Comment on Re^4: perldelta unclear on 'given's fate

Replies are listed 'Best First'.
Re^5: perldelta unclear on 'given's fate
by LanX (Cardinal) on Jan 04, 2014 at 16:00 UTC
    It's essentially the same with For-If just the fall trough is inverse.

    See provided code examples.


    i.e. you need to terminate with explicit next statements to avoid fall through.

    for ($var){ if (/abc/) { print "abc"} # falls through if (/def/) { print "def" ;next} if (/xyz/) { print "xyz" ;next} print "default"; }

    Cheers Rolf

    ( addicted to the Perl Programming Language)

      I actually think that's pretty cool, despite my desire to see a native switch. I have often use hash constructs to accomplish switch-like behavior, and I think that the for ( $var ) ... approach is much nicer...

      # Example of the hash-construct "switch", which is limited and has no +"default". # The output of this code is "abc" use Moo; my $val = 'c'; my @args = qw( abc ); my $obj = __PACKAGE__->new(); { a => sub { say 'a' }, b => \&b, c => sub { $obj->c( @_ ) }, }->{ $val }->( @args ); sub b { say 'b' }; sub c { shift; say for @_ };

      A mistake can be valuable or costly, depending on how faithfully you pursue correction
      Hmmm LanX, not unlike the construct I found when and have used ever since, I was looking for an alternative to the Switch modules available at the time - viz...
      for ($var){ SWITCH: { /abc/ && do { print "abc"} # falls through /def/ && do { print "def" ; last SWITCH } /xyz/ && do { print "xyz" ; last SWITCH } print "default"; }; . . }
      A construct I much prefer (for readability if nothing else) to what sometimes appear to extend to seemingly interminable if-elif-else constructs.

      A user level that continues to overstate my experience :-))
Re^5: perldelta unclear on 'given's fate
by dasgar (Priest) on Jan 04, 2014 at 16:31 UTC

    If you want to use some kind of switch statement, you could always try searching CPAN for a switch module.

    One module that I've recently used was Switch::Plain. If I understand the documentation correctly, it does not use smartmatch. However, it is limited to "simple string or numeric equality tests". The module's author also includes in the documentation a comparison between this module's implementation of switch and C's switch. Depending on your needs, this module might provide what you're looking for since it does provide a "switch/case/default" construct.

      Also consider Switcheroo. :-)

      use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name