Switch
view release on metacpan or search on metacpan
use Carp;
use Switch qw(Perl6 __ fallthrough);
my($C,$M);sub ok{$C++;$M.=$_[0]?"ok $C\n":"not ok $C (line ".(caller)[2].")\n"}
END{print"1..$C\n$M"}
# NON-when THINGS;
$when->{when} = { when => "when" };
*when = \&when;
# PREMATURE when
eval { when 1 { ok(0) }; ok(0) } || ok(1);
# H.O. FUNCS
given 2 {
when __ < 1 { ok(0) } else { ok(1) }
when __ < 2 { ok(0) } else { ok(1) }
when __ < 3 { ok(1) } else { ok(0) }
}
given (3) {
eval { when __ <= 1 || __ > 2 { ok(0) } } || ok(1);
when __ <= 2 { ok(0) };
when __ <= 3 { ok(1) };
}
# POSSIBLE ARGS: NUMERIC, STRING, ARRAY, HASH, REGEX, CODE
# 1. NUMERIC SWITCH
for (1..3)
{
given ($_) {
# SELF
when ($_) { ok(1) } else { ok(0) }
# NUMERIC
when 1 { ok ($_==1) } else { ok($_!=1) }
when (1) { ok ($_==1) } else { ok($_!=1) }
when 3 { ok ($_==3) } else { ok($_!=3) }
when (4) { ok (0) } else { ok(1) }
when (2) { ok ($_==2) } else { ok($_!=2) }
# STRING
when ('a') { ok (0) } else { ok(1) }
when 'a' { ok (0) } else { ok(1) }
when ('3') { ok ($_ == 3) } else { ok($_ != 3) }
when ('3.0') { ok (0) } else { ok(1) }
# ARRAY
when ([10,5,1]) { ok ($_==1) } else { ok($_!=1) }
when [10,5,1] { ok ($_==1) } else { ok($_!=1) }
when (['a','b']) { ok (0) } else { ok(1) }
when (['a','b',3]) { ok ($_==3) } else { ok ($_!=3) }
when (['a','b',2.0]) { ok ($_==2) } else { ok ($_!=2) }
when ([]) { ok (0) } else { ok(1) }
# HASH
( run in 1.046 second using v1.01-cache-2.11-cpan-ad19def0cd9 )