在perl中,我正在尝试创建一个变量$foo
,我可以执行以下两个操作:
$foo->getBirthday(); # (A)
$foo->{'name'}; # (B)
我该怎么做?
我明白如果我创建一个perl对象,那么我可以有一个getBirthday子例程,但是如果我这样做的话;我怎样才能使用->{'name'}
语法?同样,如果我创建一个基本的perl哈希引用,那么我可以做B,但我不知道如何实现A。
有人可以告诉我如何创建允许这两种语法的数据结构/对象吗?
我很确定这是合法的,因为我已经在其他人的代码中看到了它。 (不幸的是,我不可能查看他们的来源或运行他们的程序)
答案 0 :(得分:5)
如果您的对象是受祝福的哈希引用,那么它的仍然是哈希引用。您可以(尽管可能不应该)像通常那样访问其元素:
use warnings;
use strict;
use 5.010;
package Foo;
sub new {
my $class = shift;
my $hashref = {
name => 'bob',
dob => '1985-01-01',
};
return bless $hashref, $class;
}
sub getBirthday {
my $self = shift;
return $self->{dob};
}
package main;
my $f = Foo->new;
say $f->getBirthday;
say $f->{name};