in reply to a reference by any other name...

This may be what you want:

use strict; use warnings; my @array1; my @array2; my $ref1 = \@array1; my $ref2 = \@array1; my $ref3 = \@array2; print "Maybe what you want\n" if $ref1 == $ref2; print "Not what you want\n" if $ref1 == $ref3;

Prints:

Maybe what you want

Note that \@name1 returns a reference and I suspect what you want to know is if two references refer to the same object.


DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: a reference by any other name...
by blogical (Pilgrim) on Feb 20, 2006 at 01:55 UTC
    Right- I want multiple names for the same data, and each would logically produce an identical reference using \. Otherwise I could just my $ref2 = $ref1; But I don't want to use de-referencing notation when I address the data, so I don't want to just use a copy of the reference. I especially don't want a copy of the data: my @array2 = @array1;

      I think there is a confusion of nomenclature here. \ returns a reference to something and that reference can be assigned to a scalar variable, which is then said to be a reference to the original something.

      A copy of the reference by using my $ref2 = $ref1; generates the same result as my $ref2 = \$something;. You seem to be talking about some sort of alias, somewhat like a *nix file system hard link. I am having trouble imagining a situation where you would require such a thing in Perl. Perhaps you need to show us a code snippet to illustrate the problem you are having?


      DWIM is Perl's answer to Gödel
        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.