我有一个我正在研究的模块.我正在设置一些这样的属性:
$self->{FOO};
$self->{BAR};
$self->{FOOBAR};
Run Code Online (Sandbox Code Playgroud)
而且,我想使用AUTOLOAD来帮助创建访问这些属性的方法.例如,$foo->Bar()返回值$self->{BAR}.没问题.一切都是标准的.
现在,我想创建别名方法.例如,如果有人说$obj->Fu();,我会回来$self->{FOO}.我想做的是创建一个$self->{FU}指向相同内存位置的内容$self->{FOO}.这样,当我设置值时$self->{FOO},$self-{FU}也会设置.这样,我不必对AUTOLOAD的工作方式进行各种更改,也不必在设置$self->{FU}时记住设置$self->{FOO}.
这样做有简单的方法吗?
Eth*_*her 10
是的,使用Moose,而不是尝试在哈希键之间进行显式映射.编写自己的访问器或使用AUTOLOAD不是必需的,并且出错的可能性更高:
package MyClass;
use Moose;
use MooseX::Aliases;
has foo => (
is => 'rw', isa => 'Str',
alias => 'fu',
);
has bar => (
is => 'rw', isa => 'Str',
);
__PACKAGE__->meta->make_immutable;
no Moose;
1;
package main;
use strict;
use warnings;
use MyClass;
my $obj = MyClass->new;
$obj->foo("value");
$obj->fu("a new value");
# prints "foo has the value 'a new value'"
print "foo has the value '", $obj->foo, "'\n";
Run Code Online (Sandbox Code Playgroud)