如何让perl变量充当哈希和对象?
在perl中,我试图创建一个变量如何让perl变量充当哈希和对象?,perl,Perl,在perl中,我试图创建一个变量$foo,我可以在该变量上执行以下两项操作: $foo->getBirthday(); # (A) $foo->{'name'}; # (B) 我该怎么做 我知道如果我创建一个perl对象,那么我就可以有一个GetBirth子例程,但是如果我这样做了;如何使用->{'name'}语法?类似地,如果我创建一个基本的perl哈希引用,那么我可以做B,但我不知道如何完成a 有人能告诉我如何创建一个允许这两种语法的数据结构/对象吗
$foo
,我可以在该变量上执行以下两项操作:
$foo->getBirthday(); # (A)
$foo->{'name'}; # (B)
我该怎么做
我知道如果我创建一个perl对象,那么我就可以有一个GetBirth子例程,但是如果我这样做了;如何使用->{'name'}
语法?类似地,如果我创建一个基本的perl哈希引用,那么我可以做B,但我不知道如何完成a
有人能告诉我如何创建一个允许这两种语法的数据结构/对象吗
我很确定这在某种程度上是合法的,因为我在别人的代码中看到过。(不幸的是,我无法查看他们的源代码或运行他们的程序)如果您的对象是一个受祝福的哈希引用,它仍然是一个哈希引用。您可以(尽管可以说不应该)像通常使用散列一样访问其元素:
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};
如果您的对象是一个受祝福的哈希引用,那么它仍然是一个哈希引用。您可以(尽管可以说不应该)像通常使用散列一样访问其元素:
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};
我的perl已经生锈了,但我要说的是‘不可能’。我不确定
perl
是否遵循了一切都是一个对象
的习惯用法,就像ruby
那样。我很确定这在某种程度上是合法的,因为我在其他人的代码中看到过它。(不幸的是,我不可能查看它们的源代码或运行它们的程序)这很好,如果您从散列引用形成对象,那么它就是这样发生的。然而,如果你直接访问散列的内容,你就违反了一些规则,你应该改为编写访问器。我的perl已经过时了,但我要说的是“不可能”。我不确定perl
是否遵循一切都是像ruby
那样的对象
习惯用法。我很确定这在某些情况下是合法的时尚,因为我在别人的代码中看到过。(不幸的是,我不可能查看它们的源代码或运行它们的程序)这很好,如果您从散列引用形成对象,那么它就是这样发生的。但是,如果您直接访问散列的内容,您就违反了一些规则,而应该编写访问器。虽然它是一个奇怪的对象,有恒定的数据项!更好的方法是{$hashref}{qw/name dob/}=@
和我的$f=Foo->new('bob','1985-01-01')
完全符合我的需要。谢谢,没错。虽然它是一个奇怪的对象,有恒定的数据项!更好的方法是{$hashref}{qw/name dob/}=@
和我的$f=Foo->new('bob','1985-01-01')
完全符合我的需要。谢谢