这个祝福在下面的哈希值中意味着什么,以及如何取消引用它?
'limit' => bless( {
'days' => 2,
'minutes' => 0,
'months' => 0,
'nanoseconds' => 0,
'seconds' => 0
}),
bless
是 Perl 面向对象编程机制的核心部分,如perldoc bless
和中所述perldoc perlobj
。
问题中的陈述存在于包装内;在源文件中查看它上面的一行,package SomeName
以找出它是哪个包的一部分。如果没有package
声明,那么它是默认情况下的一部分,但如果正在使用package main
的话,基本上不应该是这种情况。bless
在核心 Perl 中,包和 OO 类或多或少是同义词,而对象只是被声明为该类/包成员的引用。 bless
是用于进行该声明的命令。
(Perl 有很多功能更全的 OO 框架,比如 Moo 和 Moose,它们在基本bless
ed 参考模型提供的功能之外增加了一些功能,但是你在使用这样的框架时一般不会bless
自己使用,所以我'我假设您正在查看的代码中没有使用这样的框架。)
举一个更具体的例子:
package MyClass;
sub show_foo { my $self = shift; return $self->{foo} }
my $var = { foo => 'bar' }; # $var is a normal hash reference
bless $var; # $var is now an object of type MyClass
一个bless
ed 引用仍然可以被取消引用,并且它的内容以与没有被bless
ed 相同的方式访问,但通常最好使用类定义的方法而不是直接进入胆量。例如,对于上面的示例代码,使用 using 获取$var
'foo
属性的值会$var->show_foo
比 with更好$var->{foo}
,尽管两种方式都可以。