此祝福在下面的哈希值中意味着什么,以及如何取消引用它?
'limit' => bless( {
'days' => 2,
'minutes' => 0,
'months' => 0,
'nanoseconds' => 0,
'seconds' => 0
}),
bless
是Perl的面向对象编程的机制的核心部分,如perldoc bless
和perldoc bless
中所述。问题中的陈述存在于包装内;在源文件中的它上方查找一行perldoc perlobj
,以查找它属于哪个程序包。如果没有perldoc perlobj
语句,则默认情况下它是package SomeName
的一部分,但是如果使用package
,则基本上不会出现这种情况。
在核心Perl中,包和OO类或多或少是同义词,而对象只是引用,声明为该类/包的成员。 package main
是用于进行该声明的命令。
((有许多针对Perl的功能更全的OO框架,例如Moo和Moose,它们添加了除基本bless
参考模型所提供的功能以外的功能,但您通常不会自己使用bless
当使用这样的框架时,我假设您正在查看的代码中没有使用过这样的框架。)
更具体的例子:
bless
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
来获得bless
的$var
属性的值要比使用foo
更好。