標籤:
perl中的foreach結構 首先文法foreach $rock(qw /bedrock slate lava/){ $rock="\t$rock"; $rock .="\n";} Foreach 從列表(數組)的第一個元素一直迴圈執行到最後一個元素,一次迭代一個。控制變數(本例中為$rock)每一次迭代從列表中取出一個新值。第一次為 “ bedrock” ,第三次為 “ lava” 。控制變數不是這些列表元素中的一個拷貝而是這些元素本身。 也就是說,如果在迴圈中修改這個變數,那原始列表中的元素也會被修改,如下面程式碼片段所顯示。這條性質是有用的,但是,如果不清楚,可能對其結果感到吃驚。
當迴圈結束時$rock 的值為多少呢?其值同迴圈開始之前相同。foreach 迴圈中控制變數的值會被 Perl 自動儲存和恢複。當迴圈進行時,是沒有辦法改變其值的。迴圈結束時,變數的值會回到迴圈開始前,如果沒有值則為 undef。這意味著如果有一個變數和控制變數有相同的名字:“ $rock” ,不用擔心會混淆它們。需要注意的問題:1,其他語言的迴圈變數一般是迴圈元素的拷貝,改變迴圈變數的值不會改變原來元素的值。但perl不同,perl的迴圈變數是指向迴圈元素的物理地址的,所以對迴圈變數變更,就是對原來的迴圈元素進行了更改。2,當迴圈結束時,$rock(迴圈變數)的值恢複為迴圈開始前的值,這是另外一個跟其他語言的不同的地方。 #! /usr/bin/perl -W
use strict;
my @array = (1 .. 9);
my $num;
foreach $num(@array) { $num **= 2;
}
print "@array\n";
輸出如下:
1 4 9 16 25 36 49 64 81
在這裡很重要的一點在於,控制變數$num代表著@array中的一個特定項目。如在一個foreach結構的主體內修改控制變數的值,會同時改變控制變數當前代表的那個@array元素。
因此每次執行foreach內的代碼時,@array的當前值都會發生變化
perl中foreach(一)