@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
這將打印TRUE
爲什麼@my_array = undef有一個元素?
爲什麼數組有一個元素?
@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
這將打印TRUE
爲什麼@my_array = undef有一個元素?
爲什麼數組有一個元素?
該數組有一個元素,因爲您分配了一個元素。考慮以下內容:
@array = undef; # Assigns the value 'undef' to @array
@array =(); # Assigns the empty list to @array
undef @array; # Undefines @array
它們看起來相似,但第一行與其他兩個不同(它們是相同的)。第一行產生一個元素(數值爲undef
)。另外兩個導致一個空數組。在Perl中,undef
既是一個值又是一個運算符。第一行使用它作爲值,最後一行使用它作爲操作符。通常不需要清除數組。宣佈時它們是空的:
my @array; # There's nothing in here, yet
在Perl中,undef
是一個有效的值。您可以將一個(或任意數量)的undef
放入數組或列表中。
如果你想刪除一個數組的所有元素,這樣做:
@my_array =();
更多關於在Perl布爾值見What is Truth?。 (如果您是從其他語言來了,你可能會在幾個其他的驚喜,所以這是值得一讀。)
下面是文章的關鍵位:
defined
和undef
都不錯爲 測試和設置標量。不過,不要嘗試使用 。目前,defined(@array)
返回true,如果Perl 已分配存儲陣列 東西是奇怪的,並沒有用 給普通程序員。要返回 數組到初始狀態,我們說:@array =(); # good
要說
@array = undef
是讓@array
包含一個單元素列表,與 單個元素是標量值undef
。這幾乎沒有我們 想要的。
另一個提示:本地化您的變量my
:my @array =(#whatever);
或者,您可以執行「undef @my_array」 – 2009-06-17 13:20:15
或$#my_array = -1 ;.或拼接(@ my_array,0,@ my_array);. – ysth 2009-06-17 14:52:35