Switch
view release on metacpan or search on metacpan
use Carp;
use Switch qw(__ 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-case THINGS;
$case->{case} = { case => "case" };
*case = \&case;
# PREMATURE case
eval { case 1 { ok(0) }; ok(0) } || ok(1);
# H.O. FUNCS
switch (__ > 2) {
case 1 { ok(0) } else { ok(1) }
case 2 { ok(0) } else { ok(1) }
case 3 { ok(1) } else { ok(0) }
}
switch (3) {
eval { case __ <= 1 || __ > 2 { ok(0) } } || ok(1);
case __ <= 2 { ok(0) };
case __ <= 3 { ok(1) };
}
# POSSIBLE ARGS: NUMERIC, STRING, ARRAY, HASH, REGEX, CODE
# 1. NUMERIC SWITCH
for (1..3)
{
switch ($_) {
# SELF
case ($_) { ok(1) } else { ok(0) }
# NUMERIC
case (1) { ok ($_==1) } else { ok($_!=1) }
case 1 { ok ($_==1) } else { ok($_!=1) }
case (3) { ok ($_==3) } else { ok($_!=3) }
case (4) { ok (0) } else { ok(1) }
case (2) { ok ($_==2) } else { ok($_!=2) }
# STRING
case ('a') { ok (0) } else { ok(1) }
case 'a' { ok (0) } else { ok(1) }
case ('3') { ok ($_ == 3) } else { ok($_ != 3) }
case ('3.0') { ok (0) } else { ok(1) }
# ARRAY
case ([10,5,1]) { ok ($_==1) } else { ok($_!=1) }
case [10,5,1] { ok ($_==1) } else { ok($_!=1) }
case (['a','b']) { ok (0) } else { ok(1) }
case (['a','b',3]) { ok ($_==3) } else { ok ($_!=3) }
case (['a','b',2.0]) { ok ($_==2) } else { ok ($_!=2) }
case ([]) { ok (0) } else { ok(1) }
# HASH
( run in 1.131 second using v1.01-cache-2.11-cpan-ad19def0cd9 )