in reply to (tye)Re: Aliasing Variables
in thread Aliasing Variables

my $x= aliasOf $self->{x} Maybe that should go on our wishlist for Perl 6. Or if it's an easy patch (hint hint!) or an XS that implements my $x; make_alias ($x, $self->{x}} would still help, though not as sugary of a syntax.

—John

Replies are listed 'Best First'.
Re: Re: (tye)Re: Aliasing Variables
by miyagawa (Chaplain) on Jul 22, 2001 at 11:45 UTC
    package alias; use strict; BEGIN { use base qw(Exporter); @alias::EXPORT = qw(make_alias); } sub make_alias { tie $_[0], __PACKAGE__, \$_[1]; } sub TIESCALAR { my($class, $target_ref) = @_; bless $target_ref, $class; } sub STORE { my $self = shift; $$self = shift; } sub FETCH { my $self = shift; $$self; } 1;
    No XS here, works fine with 5.x, but maybe a little slow :)
    use alias; my $self = { x => 1 }; make_alias my $x, $self->{x}; $x = 100; print $self->{x}; # 100

    --
    Tatsuhiko Miyagawa
    miyagawa@cpan.org

      Hey, cool!

      That's certainly a nice way to access class members in a method, though it doesn't give the speed boost that was my primary motivation for asking the question.

      Is this an existing CPAN thing, or did you just make it? I think it could be fleshed out a little, e.g.

      sub somemethod { my $self= shift; my ($a,$b,$c)= member_alias ($self, qw/a b c/); ...
      —John
        > Is this an existing CPAN thing, or did you just make it?

        Just a hack for a minute :)
        my $x = aliasOf($self->{x}) or my($a, $b, $c) = member_alias ... won't work well, I guess.

        Mine just works because of magical (pollutional) tie'ing using @_s.

        --
        Tatsuhiko Miyagawa
        miyagawa@cpan.org