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

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

Replies are listed 'Best First'.
Re: Re: Re: (tye)Re: Aliasing Variables
by John M. Dlugosz (Monsignor) on Jul 22, 2001 at 22:11 UTC
    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

        OK, how about something like:
        member_alias ($self, qw/a b c/, my($a, $b, $c));