Perl支持传统的循环:

    Perl也提供了until关键字:

    1. my $i = 0;
    2. until($i >= scalar @array) {
    3. print $i, ": ", $array[$i];
    4. $i++;
    5. }

    这些do循环几乎和上面的循环等价(如果@array为空会抛出一个警告):

    1. my $i = 0;
    2. do {
    3. print $i, ": ", $array[$i];
    4. $i++;
    5. } while ($i < scalar @array);
    1. do {
    2. print $i, ": ", $array[$i];
    3. $i++;
    4. } until ($i >= scalar @array);

    基本的C风格循环也可以使用。注意我们怎么将my放到for语句内部,这样声明的$i的作用于就仅限于循环内部:

    这种for循环被视为过时的东西,应该尽量避免使用,使用原生的array迭代语法看起来更漂亮。注意:与PHP不同,forforeach关键字是等价的,选可读性比较好的那个来用就可以了:

    1. foreach my $string ( @array ) {
    2. print $string;
    3. }

    如果你需要使用下标,..会创建一个匿名的整形数列表:

    1. foreach my $i ( 0 .. $#array ) {
    2. print $i, ": ", $array[$i];
    3. }
    1. foreach my $key (keys %scientists) {
    2. }

    因为hash没有既定的次序,键可能以任何次序返回,使用内置函数事先对包含键的array进行字母序排序:

    如果你没有显示指定迭代器,Perl将使用默认迭代器$_$_是第一个也是最友好的一个内置变量

    1. foreach ( @array ) {
    2. print $_;
    3. }

    如果使用默认迭代器,并且你希望在循环里只放一句语句,你可以使用下面这种超级简洁的语法:

    1. print $_ foreach @array;

    循环控制

    1. CANDIDATE: for my $candidate ( 2 .. 100 ) {
    2. for my $divisor ( 2 .. sqrt $candidate ) {
    3. next CANDIDATE if $candidate % $divisor == 0;
    4. }
    5. print $candidate." is prime\n";
    6. }