除了双关语之外,我试图import
在我的 Perl 类中实现一个方法来实例化一个Data
对象,该对象本质上是一个美化的 hashrefs 数组,来自适当的 hashrefs 数组。
这是我计划如何使用它的示例:
# Pull in the data
my $data = Data->import(
[
{ a => 1, b => 7, c => 3},
{ a => 7, b => 9, c => 2},
]
);
$data->manipulate; # Use package methods
我的import
实现如下:
package Data;
sub initialize {
my $class = shift;
my $data = [];
bless $data, $class;
return $data;
}
sub import {
my ( $class, $data ) = @_;
bless $data, $class;
return $data;
}
1;
令人惊讶的是 Perl在编译时报告错误(注意BEGIN
块):
Can't bless non-reference value at Data.pm line 51.
BEGIN failed--compilation aborted at myScript.pl line 8.
perldiag
并没有使正在发生的事情变得更加清晰:
不能保佑非参考价值
(F)
只有硬引用可能会受到祝福。这就是 Perl 如何“强制”封装对象。见perlobj
。
我什至尝试在两个单独的步骤中初始化对象并添加数据:
sub import { #< Another constructor >
my ( $class, $data ) = @_;
my $obj = $class->initialize;
push @$obj, @$data;
return $obj;
}
这导致了以下编译时错误:
Can't use an undefined value as an ARRAY reference...
BEGIN failed--compilation aborted at...
两个问题:
- 我所做的有什么问题?
- 有人可以澄清
perldiag
这个编译时错误的解释吗?