[tpm] dereferencing anonymous hashes

Rob Janes janes.rob at gmail.com
Thu Apr 12 02:05:05 PDT 2007


I guess I've just never seen $x = (); before.  doesn't seem very useful
unless it's a list expression.

[robj at localhost ~]$ perl -e '$x=(5,44); print "$x\n";'
44

[robj at localhost ~]$ perl -e '$x=@x=(5,44); print "$x\n";'
2

So the comma operator behaves differently in a scalar context from how it
behaves in a list context.

[robj at localhost ~]$ perl -e 'sub x { print "side effect\n"; return 5 }
$x=(x,44); print "$x\n";'
side effect
44

Showing that the comma operator is useful for side effects in scalar context
mode.


On 4/10/07, Uri Guttman <uri at stemsystems.com> wrote:
>
> >>>>> "RJ" == Rob Janes <janes.rob at gmail.com> writes:
>
>   RJ> $x = (); is a list assignment to a scalar.  scalar conversion
>   RJ> results in the scalar ($x that is) being assigned the count of the
>   RJ> number of items in the list.  0 or zero.
>
> wrong result and wrong explanation. you can't have a list in scalar
> context by definition. in this case the () are just doing grouping of
> nothing so it is just like saying my $x and the value in $x is undef.
>
> perl -lwe '$x = () ; print $x'
> Use of uninitialized value in print at -e line 1.
>
> you can only get the number of elements in an array by putting it in
> scalar context. and () does not make a list. parens only do grouping in
> perl, and never directly make a list.
>
> uri
>
> --
> Uri Guttman  ------  uri at stemsystems.com  --------
> http://www.stemsystems.com
> --Perl Consulting, Stem Development, Systems Architecture, Design and
> Coding-
> Search or Offer Perl Jobs  ----------------------------
> http://jobs.perl.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/toronto-pm/attachments/20070412/30308d65/attachment.html 


More information about the toronto-pm mailing list