2008-12-01 41 views
1

我的列表(@degree)是從SQL命令構建的。 SQL中的NVL命令不起作用,測試也不起作用,例如:如何用「OTHER」替換數組中的空元素?

if (@degree[$i] == "") 
if (@degree[$i] == " ") 
if (@degree[$i] == '') 
if (@degree[$i] == -1) 
if (@degree[$i] == 0) 
if (@degree[$i] ==()) 
if (@degree[$i] == undef) 

$ i是for循環中的計數器變量。基本上它通過並從表中獲得獨特的程度,並最終創建("AFA", "AS", "AAS", "", "BS")。名單並不總是這麼長,空的元素並不總是在那個位置3.

任何人都可以幫忙嗎?

我想要麼在for循環中測試,要麼在循環完成後爲這個空元素所在,然後用單詞「OTHER」替換它。

感謝任何 -Ken

回答

8

首先,在陣列中的第i個元素是$度[$ i]於,不@degree [$ i]中。其次,「==」用於數字比較 - 使用「eq」進行詞彙比較。三全,儘量if (defined($degree[$i]))

+0

謝謝...你我知道它的$度[$ i],我只是在匆忙哈哈 和EQ非常完美......我只是學習perl我自己,我無法找到這個答案,所以非常感謝你 – CheeseConQueso 2008-12-01 20:07:25

1

如果它實際上是在數據庫中的空,嘗試COALESCE

SELECT COALESCE(column, 'no value') AS column FROM whatever ... 

這就是SQL標準的方式來做到這一點。

5

保羅說的一切。而且,如果你需要一個例子:

my @degree = ('AFA', 'AS', 'AAS', '', 'BS'); 

$_ ||= 'OTHER' for @degree; 

print join ' ' => @degree; # prints 'AFA AS AAS OTHER BS'