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/


Reply via email to