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]