我有以下函數返回的數組:爲什麼打印一個perl數組給計數?
sub getUsers() {
@users[0] = 'test';
@users[1] = 'test2';
return @users;
}
@temp = getUsers();
$i = @temp;
print "There are $i users";
但是,當我將其打印出來,它顯示爲數量2
(陣列的計數)。發生了什麼?
我有以下函數返回的數組:爲什麼打印一個perl數組給計數?
sub getUsers() {
@users[0] = 'test';
@users[1] = 'test2';
return @users;
}
@temp = getUsers();
$i = @temp;
print "There are $i users";
但是,當我將其打印出來,它顯示爲數量2
(陣列的計數)。發生了什麼?
$i =
是一個標量賦值,給出了賦值標量上下文的右側;當你在標量上下文中提到一個數組時,它會返回它的長度。
當您在標量上下文中使用數組時,數組將返回數組中的項目數。
從上的Perldoc在標量上下文Perldata
列表賦值返回通過對分配的右側的表達式生產要素的數量...
當你說:
$i = @temp;
您正在列表並嘗試將其分配給標量變量。您在標量上下文中使用該數組。因此,你得到數組的大小。 (不是最大的指數這就是$#temp
將讓你
可以使用scalar
函數強制在標量上下文沉數組它可能不是否則: ` 打印「有」標@foo。 「在陣列項目\ n」;
的print
函數可以接受的時間列表,而不是隻是一個單一的字符串,然後它使用可變$,
的值加入數組
如果你想。項目清單,使用join至加入列表合併成一個字符串:
print "There are " . scalar @foo . " items in the array\n";
print "They are " . join (", " $foo) . ".\n";
您的標量值分配給數組,因而它的計算結果,其中在Perl意味着給我陣列的長度標量上下文。 – squiguy
@squiguy讓你感覺倒退了。 :)這是分配一個數組到一個標量值。 – friedo
@friedo Doh!誦讀困難再次襲擊...... – squiguy