From: Roman Makurin <dro...@gmail.com> > here is complite perl script which produces such results without > any warning: > > #!/usr/bin/perl > > use strict; > use warnings; > > use constant { > A => 0, > B => 1, > C => 2 }; > > my @a = (A, B, C); > my @b = (1, 2, 3); > > while(my $i = shift @a) { > print $i, $/ > }
But of course this does not print anything. The shift(@a) returns the first element of @a which is zero, assigns that to $i and then checks whether it's true. And of course it's not. So it skips the body and leaves the loop. Keep in mind that the value of my $i = shift @a is NOT a true/false whether there was something shifted from the array. It's the value that was removed from the array and assigned to the $i. And if that value it false (undef, 0, 0.0, "0", "0.0", "" - if I remember rigth) then the whole expression evaluates to false in boolean context. Whether you use constants or not is irrelevant. You'd see the same behaviour with my @a = (0, 1, 2); HTH, Jenda ===== je...@krynicky.cz === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/