Perl是否支持列表语法中的i

时间:2013-07-15 09:33:58

标签: perl

我可以使用Bash执行以下操作:

for i in 1 2 3 4
do
    # Do some operations on $i
    print $i
done

我可以在Perl中做类似的事情而不将值存储在数组中吗?

7 个答案:

答案 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