2008-12-01 44 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' 
相关问题