我想将条件和循环放在 Perl 的同一行上。这就是我想要实现的目标:
foreach (0 .. 10) {
print $_ if $_ % 2;
}
Run Code Online (Sandbox Code Playgroud)
这应该给我13579
。我正在寻找类似Python中的循环理解的语句,例如
[i for i in range(10) if i % 2]
Run Code Online (Sandbox Code Playgroud)
我知道这print $_ foreach 0 .. 10;
可行,但问题是将条件添加到语句中......
对于列表中的奇数元素
$_%2 and print for 0..10;
Run Code Online (Sandbox Code Playgroud)
或者
$_&1 and print for 0..10;
Run Code Online (Sandbox Code Playgroud)
或者人们可能想要奇数索引处的元素,其中它0..10
代表数组索引
my @ary = 0..10;
$_&1 and print $ary[$_] for 0..$#ary;
Run Code Online (Sandbox Code Playgroud)
该语法$#ary
适用于 array 最后一个元素的索引@ary
。
关键在于 Perl 的and
短路,因此如果其左侧的表达式不为 true,则右侧的表达式将不会运行。(同样or
- 如果 LHS 为真,则不评估 RHS。)
如果您确实需要奇数索引处的数组元素也可以
my @ary = 0..10;
print for @ary[grep { $_&1 } 0..$#ary];
Run Code Online (Sandbox Code Playgroud)
以上全部打印13579
(无换行)。在一行中,在命令行上输入并运行
perl -we'$_%2 and print for 0..10'
Run Code Online (Sandbox Code Playgroud)
如果您实际上需要在自己的行上打印每个数字(根据发布的评论判断),请替换print
为say
。例如,对于数组中的奇数数组元素@ary
$_%2 and say for 0..$#ary;
Run Code Online (Sandbox Code Playgroud)
或者,对于奇数索引处的数组元素
$_&1 and say $ary[$_] for 0..$#ary;
Run Code Online (Sandbox Code Playgroud)
添加use feature 'say';
到程序的开头(除非其他加载的工具/库已启用它)。
归档时间: |
|
查看次数: |
435 次 |
最近记录: |