Perl 迴圈
Perl 支援與其他程式語言類似的控制結構。Perl 支援四種型別的控制結構:foreach
、while
和 until
。我們使用這些語句,重複執行一些程式碼。
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()
中使用了 keys
。 keys
是 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