Could be that someone would be interested in this thread
from fwp:
http:[EMAIL PROTECTED]/msg02488.html
Friday, June 14, 2002, 9:23:43 PM, Chas Owens wrote:
> On Fri, 2002-06-14 at 15:50, todd r wade wrote:
>>
>>
>> Chas Owens wrote:
>>
>>
>> ><snip>
>> >> Alternately, you could say:
>> >>
>> >> $track ||= '';
>> >>
>> >> right before the next time you use foo after the split. I dont know
>> why this
>> >> works offhand, I just remember reading in the docs somewhere that
>> its exempt
>> >> from warnings. But for me, that is crossing over into the land of
>> ugly =0).
>> ></snip>
>> >
>> >$track ||= '';
>> >
>> >is equivalent to
>> >
>> >$track = $track || '';
>> >
>> >which is equivalent to
>> >
>> >if ($track) {
>> > $track = $track;
>> >} else {
>> > $track = '';
>> >}
>> >
>>
>> When I said, "I dont know why this works...", I meant I dont remember
>> why ||= is exempt from warnings. I know what it does.
>>
>> Your examples are neither equivalent nor dangerous in the context of
>> this thread. We are trying to avoid "undefined value..." warnings by
>> the use of a variable after a split.
>>
>> Im sure your second example is not exempt from the warning ,where
>> $track ||= ''; is exempt.
>>
>> also, The original OPs conditional following the split uses the eq
>> operator with $track as one of its arguments, so the zero issue does
>> not apply.
>>
>> This was my second example, and my first suggestion to use:
>>
>> if ( defined($track) and ( $track eq "foo") ) { ....
>>
>> would be the most prudent IMHO.
>>
>> Todd W
> The reason it works is because of the third case. The value undef is
> equivalent to false in logical situations. The proof is below. I agree
> that
> if ( defined($track) and ( $track eq "foo") ) {
> .
> .
> .
> }
> is the safest method since it correctly handles the case where $track ==
> 0 (which would be the first track in some numbering systems). As I
> said, Perl 6 will solve this problem with a new operator.
> <output>
> Testing for warnings
> shortest way
> Use of uninitialized value in print at ./t.pl line 12.
> test
> short way
> Use of uninitialized value in print at ./t.pl line 22.
> test
> Longest way
> Use of uninitialized value in print at ./t.pl line 32.
> test
> Testing for overwrite of 0
> shortest way
> test
> short way
> test
> Longest way
> test
> </output>
> <example>
> #!/usr/bin/perl
> use warnings;
> use strict;
> print "Testing for warnings\n\n";
> print "shortest way\n";
> my $var1;
> print $var1;
> $var1 ||= "test\n\n";
> print $var1;
> print "short way\n";
> my $var2;
> print $var2;
> $var2 = $var2 || "test\n\n";
> print $var2;
> print "Longest way\n";
> my $var3;
> print $var3;
> if ($var3) {
> $var3 = $var3;
> } else {
> $var3 = "test\n\n";
> }
> print $var3;
> print "Testing for overwrite of 0\n\n";
> print "shortest way\n";
> my $var4 = 0;
> $var4 ||= "test\n\n";
> print $var4;
> print "short way\n";
> my $var5 = 0;
> $var5 = $var5 || "test\n\n";
> print $var5;
> print "Longest way\n";
> my $var6 = 0;
> if ($var6) {
> $var6 = $var6;
> } else {
> $var6 = "test\n\n";
> }
> print $var6;
> </example>
> --
> Today is Setting Orange the 19th day of Confusion in the YOLD 3168
> Frink!
> Missile Address: 33:48:3.521N 84:23:34.786W
--
Best Regards,
Daniel [EMAIL PROTECTED]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]