我可以使用Bash执行以下操作:
for i in 1 2 3 4
do
# Do some operations on $i
print $i
done
我可以在Perl中做类似的事情而不将值存储在数组中吗?
答案 0 :(得分:7)
是。 for
在列表中运行。
for my $i (1, 2, 3, 4) {
# Do some operations on $i
print $i
}
虽然有这样的数据,你最好使用范围:(1 .. 4)
答案 1 :(得分:3)
是的,perl支持。您可以在Perl中轻松编写这样的列表:
for (1..4) {
print $_;
}
答案 2 :(得分:2)
你有很多答案。 Perl Best Practices表示不使用$_
或foreach
,并将{
与for
放在同一行:
use strict;
use warnings;
use features qw(say);
for my $i (1, 2, 3, 4) {
say "$i";
}
然而,这是同样的事情,但更清洁:
for my $i ( qw(1 2 3 4) ) {
say $i;
}
我在这里使用qw
,它会在括号中生成单词的列表。我不需要逗号甚至引号:
for my $i ( qw(apple baker charlie delta) ) {
say $i;
}
正如其他人指出的那样,在您的特定示例中,您可以使用:
for my $i (1..4) {
say "$i";
}
但是,你可以在BASH或Kornshell中做到这一点:
for i in {1..4}
do
echo $i #In BASH you have to use "echo". The "print" is a Kornshellism
done
答案 3 :(得分:1)
当然Perl可以。试试:
for (1..4)
{
# Do some operations on $_
print $_;
}
或者如果您想要$i
而不是默认$_
:
for my $i (1..4)
{
# Do some operations on $i
print $i;
}
答案 4 :(得分:1)
从命令提示符开始,一个简单的单行程序将是:
$ perl -e'printf“%i \ n”,$ _ for(0..4)'
答案 5 :(得分:-1)
找到它:
foreach (1,2,3,4)
{
print $_;
}
我知道(1,2,3,4)仍然是一个数组。但这符合我的需要。
答案 6 :(得分:-1)
你可以做这些事情。例如。有一个while循环:
use feature qw( say );
my $arg = '';
while ($arg = shift @ARGV) {
say $arg;
}
这给出了:
$ perl tmp.pl arg1 arg2 arg3
arg1
arg2
arg3
您也可以通过阅读文件或其他类型的操作来执行此操作。另请参阅这个新的Blogpost,其中讨论了一个允许在while循环中进行此类处理的模块:http://blogs.perl.org/users/joel_berger/2013/07/a-generator-object-for-perl-5.html