-1

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

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

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

4

7 回答 7

7

是的。for对列表进行操作。

for my $i (1, 2, 3, 4) {
    # Do some operations on $i
    print $i
}

虽然,有了这样的数据,你最好有一个范围:(1 .. 4)

于 2013-07-15T09:37:45.740 回答
3

是的,perl 支持这一点。你可以在 Perl 中简单地编写一个这样的列表:

for (1..4) {
    print $_;
}
于 2013-07-15T09:37:30.017 回答
2

你得到了很多答案。Perl Best Practices说不要使用$_or 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
于 2013-07-15T15:31:14.213 回答
1

在命令提示符下,一个简单的单行代码将是:

$ perl -e 'printf "%i\n", $_ for (0..4)'

于 2013-07-15T13:09:15.357 回答
1

当然 Perl 可以。尝试:

for (1..4)
{
    # Do some operations on $_
    print $_;   
}

或者如果你想要$i而不是默认$_

for my $i (1..4)
{
    # Do some operations on $i
    print $i;
}
于 2013-07-15T09:37:57.613 回答
-1

你可以做这样的事情。例如,使用 while 循环:

use feature qw( say );

my $arg = ''; 
while ($arg = shift @ARGV) {
    say $arg;
}

这给出了:

$ perl tmp.pl arg1 arg2 arg3
arg1
arg2
arg3

您也可以通过读取文件或其他类型的操作来执行此操作。另请参阅此新博客文章,其中讨论了允许在 while 循环中进行此类处理的模块:http: //blogs.perl.org/users/joel_berger/2013/07/a-generator-object-for-perl- 5.html

于 2013-07-15T09:43:48.050 回答
-1

找到了:

foreach (1,2,3,4)
{
    print $_;
}

我知道 (1,2,3,4) 仍然是一个数组。但这符合我的需要。

于 2013-07-15T09:38:07.067 回答