in reply to Re^3: a reference by any other name...
in thread a reference by any other name...

The situation is thus:
I'd like to use hashed and arrayed data, being passed into a function as references, using non-de-referencing notation.
Instead of $array_ref->[0], I want to assign the data referenced by $array_ref to something like @array_by_another_name, so that I can then just say $array_by_another_name[0].
If I just assign the de-referenced data to a like variable I will get a copy... (ie my @array2 = @{$array_ref}; is not what I want).
my %foo = ('a' => 1); my_sub(\%foo); sub my_sub { my $foo_ref = shift; #Now I want to do something here to name %bar as pointing to %foo: #my %bar ????? $foo_ref; #such that print $bar{a}; #prints '1' #and if I were to $bar{b} = 2; }; print $foo{b}; #prints '2'
I think I have a good grasp on wrangling references... but I'm always up for elucidation. This would indeed be like a hard reference on a unix system- it increases the reference count, but is otherwise treated like it IS what it refers to- no de-referencing needed.

Replies are listed 'Best First'.
Re^5: a reference by any other name...
by GrandFather (Saint) on Feb 20, 2006 at 02:56 UTC

    Unless Aristotle's alias module sugestion does what you want, I think you are stuck. There is a little syntactic sugar - the -> is optional (sort of):

    use strict; use warnings; my @array = qw(a b c d); printArray (\@array); sub printArray { my $aref = shift; print "First element by ref = " . $aref->[0] . "\n"; print "First element by sugar = " . $$aref[0] . "\n"; }

    Prints:

    First element by ref = a First element by sugar = a

    Appart from that, at the end of the day I don't think aliasing is going to get you a lot except some pain. The keystrokes saved just won't add up to enough to compensate for the bugs that are bound to be introduced by obfusicating your code in that fashion - unless that is the intent of course. :)

    Update: Oh, package variables. Perl does have some nasty surprises doesn't it :)


    DWIM is Perl's answer to Gödel