use 5.010;
my $x = 40;
given ($x)
{
when ([0..9, 50..59]) { say 0 }
when ([10..19, 60..69]) { say 1 }
when ([20..29, 70..79]) { say 2 }
when ([30..39, 80..89]) { say 3 }
when ([40..49, 90..99]) { say 4 }
}
####
use 5.014;
my $x = 40;
given ($x)
{
say 0 when [0..9, 50..59];
say 1 when [10..19, 60..69];
say 2 when [20..29, 70..79];
say 3 when [30..39, 80..89];
say 4 when [40..49, 90..99];
}
##
##
use 5.010;
my $x = 40;
say 0 if $x ~~ [0..9, 50..59];
say 1 if $x ~~ [10..19, 60..69];
say 2 if $x ~~ [20..29, 70..79];
say 3 if $x ~~ [30..39, 80..89];
say 4 if $x ~~ [40..49, 90..99];
##
##
use Smart::Dispatch;
my $x = 40;
my $tiers = dispatcher {
match [0..9, 50..59], dispatch { 0 };
match [10..19, 60..69], dispatch { 1 };
match [20..29, 70..79], dispatch { 2 };
match [30..39, 80..89], dispatch { 3 };
match [40..49, 90..99], dispatch { 4 };
};
say $tiers->($x);
##
##
my $x = 40;
my %tiers = (
(map { $_ => 0 } 0..9, 50..59),
(map { $_ => 1 } 10..19, 60..69),
(map { $_ => 2 } 20..29, 70..79),
(map { $_ => 3 } 30..39, 80..89),
(map { $_ => 4 } 40..49, 90..99),
);
print $tiers{$x} . "\n";
##
##
use 5.010;
my $standard_say = sub {
say 0 if $x ~~ [0..9, 50..59];
say 1 if $x ~~ [10..19, 60..69];
say 2 if $x ~~ [20..29, 70..79];
say 3 if $x ~~ [30..39, 80..89];
say 4 if $x ~~ [40..49, 90..99];
};
$standard_say->(40);
# Now imagine we decide to special-case 39...
my $modified_say = sub {
if ($_[0] == 39) {
say "yay!";
return;
}
$standard_say->(@_);
};
$modified_say->(40);
$modified_say->(39);
##
##
use Smart::Dispatch;
my $standard_say = dispatcher {
match [0..9, 50..59], dispatch { say 0 };
match [10..19, 60..69], dispatch { say 1 };
match [20..29, 70..79], dispatch { say 2 };
match [30..39, 80..89], dispatch { say 3 };
match [40..49, 90..99], dispatch { say 4 };
};
$standard_say->(40);
my $modified_say = dispatcher { match 39, dispatch { say "yay!" } } . $standard_say;
$modified_say->(40);
$modified_say->(39);