如何让perl变量充当散列和对象?

时间:2014-12-05 00:59:36

标签: perl

在perl中,我正在尝试创建一个变量$foo,我可以执行以下两个操作:

$foo->getBirthday();     # (A)
$foo->{'name'};          # (B)

我该怎么做?

我明白如果我创建一个perl对象,那么我可以有一个getBirthday子例程,但是如果我这样做的话;我怎样才能使用->{'name'}语法?同样,如果我创建一个基本的perl哈希引用,那么我可以做B,但我不知道如何实现A。

有人可以告诉我如何创建允许这两种语法的数据结构/对象吗?

我很确定这是合法的,因为我已经在其他人的代码中看到了它。 (不幸的是,我不可能查看他们的来源或运行他们的程序)

1 个答案:

答案 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};