sun*_*ica 5 perl foreach for-loop
关于块when之外的语句,文档似乎很少given.据说when可以在设置'主题'时使用,但是当确定某个主题被设置时?考虑这些情况:
for (@arr) {
when { }
}
Run Code Online (Sandbox Code Playgroud)
似乎这是默认的基本情况,但我甚至无法在perl 5.14.2上工作 - 原来这只是另一个bash引用问题.$ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'没有任何打印.我究竟做错了什么?
for my $elem (@arr) {
when { }
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?$ elem会自动成为使用的主题when吗?
for (@arr) {
$_ = some_expression($_);
when { }
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?可以在循环中设置主题吗?
此外,上述每个代码段使用foreach而不是for?时有什么区别吗?
基本上,我对主题的主题非常不清楚,所以请赐教.
这是一个shell命令构造错误.
perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'
Run Code Online (Sandbox Code Playgroud)
应该
perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print '\''boom'\''} }'
Run Code Online (Sandbox Code Playgroud)
我们可以切换到双引号来简化
perl -Mfeature=switch -le'foreach (qw(a b c)) { when (/a/) {print "boom"} }'
Run Code Online (Sandbox Code Playgroud)
我们可以进一步简化
perl -E'for (qw(a b c)) { when (/a/) { say "boom" } }'
Run Code Online (Sandbox Code Playgroud)
关键字for和foreachPerl是一样的.
注意5.18标记given并when作为实验.它不会消失,但它会改变.我解释一下这里发生了什么.
不,when不使用$elem; 它总是使用$_.
是的,你可以改变$_内部for或given如果你愿意的话.请注意,foreach循环将其主题别名化为正在访问的元素,因此更改另一个会更改另一个.
my @x = qw( abc def );
for (@x) { $_ = uc($_); }
say @x; # ABCDEF
Run Code Online (Sandbox Code Playgroud)