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);