Perl 循环

Perl 支持与其他编程语言类似的控制结构。Perl 支持四种类型的控制结构:foreachwhileuntil。我们使用这些语句,重复执行一些代码。

Perl 循环

代码块将重复执行直到满足条件触发。让我们举一个 Perl 循环数组的例子。

my @array=(1..10);

for(my $count=0;$count<10;$count++)

{

    print "The array index $count value is $array[$count]";

    print "\n";

}

输出:

The array index 0 value is 1
The array index 1 value is 2
The array index 2 value is 3
The array index 3 value is 4
The array index 4 value is 5
The array index 5 value is 6
The array index 6 value is 7
The array index 7 value is 8
The array index 8 value is 9
The array index 9 value is 10

这里,在 for() 表达式中,包含了许多语句,每个语句都有意义。

for(初始化;条件;递增)

这是另一种使用方式。

for(1..10)

{

    print "$_ n";

    print "\n";

}

输出:

1n
2n
3n
4n
5n
6n
7n
8n
9n
10n

Perl foreach

foreach 语句的使用方式与 for 相同,主要的区别是我们没有任何条件检查和增量。

让我们用 foreach 来做同样的例子。

my @array=(1..10);

foreach my $value (@array)

{  

    print " The value is $value\n";

}

输出:

The value is 1
The value is 2
The value is 3
The value is 4
The value is 5
The value is 6
The value is 7
The value is 8
The value is 9
The value is 10

foreach 获取数组的每个元素,并为每次迭代将该值赋给 $var。我们也可以使用 $_ 来作为变量。

my @array=(1..10);

foreach(@array)

{

    print " The value is $_ \n"; # This is same as the above code.

}

输出:

The value is 1
The value is 2
The value is 3
The value is 4
The value is 5
The value is 6
The value is 7
The value is 8
The value is 9
The value is 10

这看起来很适合访问数组。哈希数组怎么样呢,我们如何使用 foreach 获取哈希数组键和值?

我们可以使用 foreach 通过循环来访问哈希数组的键和值。

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);

foreach my $key (keys %hash)

{

print "$key \n";

}

输出:

Mickey
Tom
Jerry

你可能想知道,为什么我们在 foreach() 中使用了 keyskeys 是 Perl 的内置函数,让我们可以快速访问哈希数组的键。那值呢?我们可以使用 values 函数来访问哈希数组值。

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);

foreach my $value(values %hash) # This will push each value of the key to $value

{

     print " the value is $value \n";

}

输出:

the value is 24
the value is 23
the value is 25

Perl While 循环

Perl While 循环是一个控制结构,其中假如条件为真的话代码块将被重复执行。

仅当条件为假时,代码块才会退出。

让我们以 Perl While 循环为例。

这是一个问题,需要用户输入,直到提供为 7 的数字才会退出。

#!/usr/bin/perl

$Tastones = 0;

$luckynum = 7;

print "Guess a Number Between 1 and 10\n";

$Tastones = <STDIN>;

while ($Tastones != $luckynum)

{

    print "Guess a Number Between 1 and 10 \n ";

    $Tastones = <STDIN>;

}

print "You guessed the lucky number 7"

输出:

Guess a Number Between 1 and 10
9
Guess a Number Between 1 and 10
5
Guess a Number Between 1 and 10
7
You guessed the lucky number 7

在上面的例子中,如果输入 7 以外的输入,则 while 条件不成立。

如果你看到在这里工作的方式,只有当一段时间内的条件为真时,代码块才会执行。

Perl do-while 循环

do-while 循环即使 while 部分中的条件为 false,它也至少执行一次。

让我们用 do while 做同样的例子。

$Tastones = 10;

 do {

 print "$Tastones \n";

 $Tastones--;

 } 

 while ($Tastones >= 1);

 print "Now value is less than 1";

输出:

10
9
8
7
6
5
4
3
2
1
Now value is less than 1

Perl until

until 代码块类似于条件语句中的 unless。这里,仅当 until 块中的条件为假时才执行代码块。

让我们用我们一直举的例子来看以下。

这是一个问题,需要用户输入,并且在提供的名称不是 sai 之前不会退出。

print "Enter any name \n";

 my $name=<STDIN>;

 chomp($name);

 until($name ne 'sai')

 {

    print "Enter any name \n";

    $name=<STDIN>;

    chomp($name);

 }

输出:

Enter any name sai

Perl do-until:

do until 只有当我们需要一个条件为假时并且它应该至少执行一次时才可使用它。

print "Enter any name \n";

 my $name=<STDIN>;

 chomp($name);

 do

 {

     print "Enter any name \n";

     $name=<STDIN>;

    chomp($name);

 }until($name ne 'sai');

输出:

Enter any name Howard
Enter any name Sheldon
Enter any name sai