循环
“每个问题都有不止一种解决方法”
Perl支持传统的while
循环:
my $i = 0;
while($i < scalar @array) {
print $i, ": ", $array[$i];
$i++;
}
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);
and
my $i = 0;
do {
print $i, ": ", $array[$i];
$i++;
} until ($i >= scalar @array);
基本的C风格for
循环也可以使用。注意我们怎么将my
放到for
语句内部,这样声明的$i
的作用于就仅限于循环内部:
for(my $i = 0; $i < scalar @array; $i++) {
print $i, ": ", $array[$i];
}
# $i在这里就不存在了,代码显得更加整洁。
这种for
循环被视为过时的东西,应该尽量避免使用,使用原生的array迭代语法看起来更漂亮。注意:与PHP不同,for
和foreach
关键字是等价的,选可读性比较好的那个来用就可以了:
foreach my $string ( @array ) {
print $string;
}
如果你需要使用下标,range运算符..
会创建一个匿名的整形数列表:
foreach my $i ( 0 .. $#array ) {
print $i, ": ", $array[$i];
}
你无法迭代一个hash,而你可以迭代它所有的键。使用内置函数keys
来取得包含这个hash所有键的array,然后使用foreach
来遍历它:
foreach my $key (keys %scientists) {
print $key, ": ", $scientists{$key};
}
因为hash没有既定的次序,键可能以任何次序返回,使用内置函数sort
事先对包含键的array进行字母序排序:
foreach my $key (sort keys %scientists) {
print $key, ": ", $scientists{$key};
}
如果你没有显示指定迭代器,Perl将使用默认迭代器$_
。$_
是第一个也是最友好的一个内置变量:
foreach ( @array ) {
print $_;
}
如果使用默认迭代器,并且你希望在循环里只放一句语句,你可以使用下面这种超级简洁的语法:
print $_ foreach @array;
循环控制
next
和last
可以用来控制循环过程,在其他大部分编程语言中分别相当于continue
和break
。一般约定,行标写成全部大写。在循环里加上行标以后,next
和last
可以选择指定跳转到某个行标。下面的示例程序能够找出100以内的素数:
CANDIDATE: for my $candidate ( 2 .. 100 ) {
for my $divisor ( 2 .. sqrt $candidate ) {
next CANDIDATE if $candidate % $divisor == 0;
}
print $candidate." is prime\n";
}
当前内容版权归 胡瀚森(Sam Hu)译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 胡瀚森(Sam Hu)译 .