在perl脚本中使用$ self创建实例时出错

yok*_*oko 0 perl attributes self shift

我尝试在perl脚本中创建一个对象.因此我有一个构造函数

new(;@)
{
     my $class = shift;
     my $self = {};
     bless $self, $class;
     $self->_init(@_);
     return $self;
}
Run Code Online (Sandbox Code Playgroud)

和我的_init(;@)功能,初始化对象

my $self = shift;
if( @_ )
{
    my %extra = @_;
    @$self{keys %extra} = values %extra;
}
return;
Run Code Online (Sandbox Code Playgroud)

我使用这两个功能的方式是错误的吗?我用两条线开始每隔一个子线

my $self = shift;
croak "instance method called for class" unless ref $self;
Run Code Online (Sandbox Code Playgroud)

但是我每次使用它时都会得到syntax/ String found where operator expected错误.

因此我的问题是:我是否正确使用这两种功能?我一直认为我只需要$self像我一样初始化一次,并且可以为脚本的其余部分指出我想要的一切.

cho*_*oba 6

croak默认情况下未加载.你必须use Carp在包装中才能使用它(见鲤鱼).

顺便说一下,方法调用会忽略原型.不要使用它们.也不要将它们用于功能.

您可以使用类似Class :: Declare :: Attributes的东西来保存一些输入:

sub new :class {
    ...
}
Run Code Online (Sandbox Code Playgroud)