tags:

views:

539

answers:

3

My list (@degree) is built from a SQL command. The NVL command in the SQL isn't working, neither are tests such as:

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 is a counter variable in a for loop. Basically it goes through and grabs unique degrees from a table and ends up creating ("AFA", "AS", "AAS", "", "BS"). The list is not always this long, and the empty element is not always in that position 3.

Can anyone help?

I want to either test during the for loop, or after the loop completes for where this empty element is and then replace it with the word, "OTHER".

Thanks for anything -Ken

+6  A: 

First of all, the ith element in an array is $degree[$i], not @degree[$i]. Second, "==" is for numerical comparisons - use "eq" for lexical comparisons. Third of all, try if (defined($degree[$i]))

Paul Tomblin
thanks... ya i know its $degree[$i], i was just in a rush hahaand the eq worked perfectly... I'm just learning perl on my own and i couldnt find this answer anywhere so thank you very much
CheeseConQueso
`s/lexical/textual/`
Brad Gilbert
+1  A: 

If its actually a null in the database, try COALESCE

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

That's the SQL-standard way to do it.

derobert
+2  A: 

Everything that Paul said. And, if you need an example:

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

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

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