At 09:58 AM 3/7/07 -0800, Karyn Williams wrote:
>At 09:35 AM 3/7/07 -0800, Tom Phoenix wrote:
>>On 3/7/07, Karyn Williams <[EMAIL PROTECTED]> wrote:
>>
>>> I have a script where I am trying to use the conditional operator.
>>> Apparently I am confused as it always evaluates false.
>>
>>> $initial ?
>>> $gecos = "$first $initial $last, $sid, SIR Fall 2007":
>>> $gecos = "$first $last, $sid, SIR Fall 2007";
>>
>>It's a very confusing operator. One thing about it that's confusing is
>>its precedence: just higher than assignment. That means that your code
>>is really saying something like this:
>>
>> ($initial ? ($gecos = "fred") : $gecos)
>> = "barney";
>>
>>In other words, you're assigning the second string to $gecos in either
>>case (right on top of the first string, if $initial was true). If you
>>put in the needed parentheses, I think it would do what you expect,
>>even though it seems to be an odd programming style.
>>
>>Are you using the return value from the conditional operator? If not,
>>you should code this as an ordinary if/else. But this isn't an
>>unreasonable use of this operator. I think what you really meant was
>>more like this, maybe?
>>
>> $gecos = $initial ?
>> "$first $initial $last, $sid, SIR Fall 2007" :
>> "$first $last, $sid, SIR Fall 2007";
>>
>>I didn't have to use parentheses here for the same reason that your
>>code needed them: The precedence of ?: binds more tightly to its
>>arguments than = binds to its arguments.
>
>Thanks.
>
>Here is my attempt at an if statement. However it seems to do the same
>thing. I have printed $initial as you can see in the output below. I am
>still having the same problem. I know they are both running the else
>because of the double space between the first and last name in the second
>example. Is there a better way to check if a string is null ?
>
> print ":$initial:\n";
> if ($initial =~ "") {
> $gecos = "$first $last, $sid, SIR Fall 2007";
> } else {
> $gecos = "$first $initial $last, $sid, SIR Fall 2007"; }
> print "$login\:\:\:\:\:\:$gecos,\:\:$shell\:\n";
>
>
>:A:
>ltesting::::::Lisa A Testing, 999998, SIR Fall 2007,::/bin/sh/:
>::
>fltestjr::::::ftest ltest Jr., 999999, SIR Fall 2007,::/bin/sh/:
I tried your example and it worked great. I then fixed my if statement and
now its working too.
if ($initial) {
$gecos = "$first $initial $last, $sid, SIR Fall 2007";
} else {
$gecos = "$first $last, $sid, SIR Fall 2007"; }
Thanks for your help.
--
Karyn Williams
Network Services Manager
California Institute of the Arts
[EMAIL PROTECTED]
http://www.calarts.edu/network
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/