Perl支持传统的循环:
Perl也提供了until
关键字:
my $i = 0;
until($i >= scalar @array) {
print $i, ": ", $array[$i];
$i++;
}
这些do
循环几乎和上面的循环等价(如果@array
为空会抛出一个警告):
my $i = 0;
do {
print $i, ": ", $array[$i];
$i++;
} while ($i < scalar @array);
do {
print $i, ": ", $array[$i];
$i++;
} until ($i >= scalar @array);
基本的C风格循环也可以使用。注意我们怎么将my
放到for
语句内部,这样声明的$i
的作用于就仅限于循环内部:
这种for
循环被视为过时的东西,应该尽量避免使用,使用原生的array迭代语法看起来更漂亮。注意:与PHP不同,for
和foreach
关键字是等价的,选可读性比较好的那个来用就可以了:
foreach my $string ( @array ) {
print $string;
}
如果你需要使用下标,..
会创建一个匿名的整形数列表:
foreach my $i ( 0 .. $#array ) {
print $i, ": ", $array[$i];
}
foreach my $key (keys %scientists) {
}
因为hash没有既定的次序,键可能以任何次序返回,使用内置函数事先对包含键的array进行字母序排序:
如果你没有显示指定迭代器,Perl将使用默认迭代器$_
。$_
是第一个也是最友好的一个内置变量:
foreach ( @array ) {
print $_;
}
如果使用默认迭代器,并且你希望在循环里只放一句语句,你可以使用下面这种超级简洁的语法:
print $_ foreach @array;
循环控制
CANDIDATE: for my $candidate ( 2 .. 100 ) {
for my $divisor ( 2 .. sqrt $candidate ) {
next CANDIDATE if $candidate % $divisor == 0;
}
print $candidate." is prime\n";
}