我可以使用 Bash 执行以下操作:
for i in 1 2 3 4
do
# Do some operations on $i
print $i
done
我可以在 Perl 中做类似的事情而不将值存储在数组中吗?
我可以使用 Bash 执行以下操作:
for i in 1 2 3 4
do
# Do some operations on $i
print $i
done
我可以在 Perl 中做类似的事情而不将值存储在数组中吗?
是的。for
对列表进行操作。
for my $i (1, 2, 3, 4) {
# Do some operations on $i
print $i
}
虽然,有了这样的数据,你最好有一个范围:(1 .. 4)
是的,perl 支持这一点。你可以在 Perl 中简单地编写一个这样的列表:
for (1..4) {
print $_;
}
你得到了很多答案。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
在命令提示符下,一个简单的单行代码将是:
$ perl -e 'printf "%i\n", $_ for (0..4)'
当然 Perl 可以。尝试:
for (1..4)
{
# Do some operations on $_
print $_;
}
或者如果你想要$i
而不是默认$_
:
for my $i (1..4)
{
# Do some operations on $i
print $i;
}
你可以做这样的事情。例如,使用 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
找到了:
foreach (1,2,3,4)
{
print $_;
}
我知道 (1,2,3,4) 仍然是一个数组。但这符合我的需要。