dsb has asked for the wisdom of the Perl Monks concerning the following question:
perlref states that there is a difference between taking a reference to a list, and a reference to an array:
dsb
This @ISA my cool %SIG
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:
- Why the distinction? Why are there two seperate behaviors?
- What is happening that creates the difference in behavior?
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...
dsb
This @ISA my cool %SIG
|
---|
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 |
Back to
Seekers of Perl Wisdom