dsb has asked for the wisdom of the Perl Monks concerning the following question:
Taking a reference to an enumerated list is not the same
as using square brackets--instead it's the same as
creating a list of references!
@list = (\$a, \@b, \%c);
@list = \($a, @b, %c); # same thing!
As a special case, \(@foo) returns a list of references to
the contents of @foo, not a reference to @foo itself.
Likewise for %foo, except that the key references are to
copies (since the keys are just strings rather than full-
fledged scalars).
So I have two questions:
Based on these examples, my best guess is that the parentheses are the key. Going back to the "if it looks like a function, then it is a function" philosophy behind the interpreter, I guess \() does look like a function. As such, \("one","two","three") and \(@list) gets executed like a function call with n arguments (3 in the case of the list). @list gets flattened like any other list passed as an argument and so the behavior is basically the same for both cases.#!/usr/bin/perl use strict; # example 1 my $ref1 = \(qw(one two three)); # should be called in list context # example 2 my @list = qw(one two three); my $ref2 = \@list; # example 3 # returns same as example 1 my $ref3 = \(@list); # should be called in list context print ref $ref1, "\n"; print ref $ref2, "\n"; print ref $ref3, "\n";
That's my best guess anyway...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: \ Operator in referencing
by Gilimanjaro (Hermit) on Aug 06, 2004 at 13:56 UTC | |
|
Re: \ Operator in referencing (unusual)
by tye (Sage) on Aug 06, 2004 at 15:39 UTC | |
|
Re: \ Operator in referencing
by ishnid (Monk) on Aug 06, 2004 at 14:36 UTC | |
|
Re: \ Operator in referencing
by Prior Nacre V (Hermit) on Aug 06, 2004 at 13:43 UTC |