switch文
バージョン5.10以降ではgivenを使うとswitch相当のことができます。
use strict;
use warnings;
use feature ':5.10';
my $val = 'def';
# 文字列
given ($val) {
when ('abc') {
say "1";
}
when ('def') {
say "2";
}
when ('ghi') {
say "3";
}
default {
say "0";
}
}
# 正規表現
given ($val) {
when (/^abc$/) {
say "1";
}
when (/^def$/) {
say "2";
}
when (/^ghi$/) {
say "3";
}
default {
say "0";
}
}
my $num = 88;
# リスト
given ($num) {
when ([90..100]) { say "A" }
when ([80..89]) { say "B" }
when ([60..79]) { say "C" }
default { say "D" }
}
# 関数
given ($num) {
when (sub { $_[0] >= 90 }) { say "A" }
when (sub { $_[0] >= 80 }) { say "B" }
when (sub { $_[0] >= 60 }) { say "C" }
default { say "D" }
}
# デフォルト変数
given ($num) {
when ($_ >= 90) { say "A" }
when ($_ >= 80) { say "B" }
when ($_ >= 60) { say "C" }
default { say "D" }
}
モジュールを使わない方法もあります。
use strict;
use warnings;
my $val = 'def';
$_ = $val;
SWITCH: {
/^abc$/ && do { print "1\n"; last SWITCH; };
/^def$/ && do { print "2\n"; last SWITCH; };
/^ghi$/ && do { print "3\n"; last SWITCH; };
print "0\n";
}
