在 perl 脚本中使用 $self 创建实例时出错
Error while creating an instance by using $self in a perl script
我尝试在我的 perl 脚本中创建一个对象。因此我有一个构造函数
new(;@)
{
my $class = shift;
my $self = {};
bless $self, $class;
$self->_init(@_);
return $self;
}
还有我的_init(;@)
函数,初始化对象
my $self = shift;
if( @_ )
{
my %extra = @_;
@$self{keys %extra} = values %extra;
}
return;
我是不是用错了这两个功能?我用两条线开始每隔一个子
my $self = shift;
croak "instance method called for class" unless ref $self;
但每次我使用它时,我在 return 中只收到 syntax
/ String found where operator expected
错误。
因此我的问题是:我是否以正确的方式使用这两个功能?我一直认为我只需要初始化 $self
一次,就像我做的那样,并且可以为脚本的其余部分指向我想要的所有内容。
croak
默认不加载。您必须在包中 use Carp
才能使用它(请参阅 Carp)。
顺便说一句,方法调用会忽略原型。不要使用它们。 Don't use them for functions, either.
您可以使用 Class::Declare::Attributes 之类的东西来节省一些输入:
sub new :class {
...
}
我尝试在我的 perl 脚本中创建一个对象。因此我有一个构造函数
new(;@)
{
my $class = shift;
my $self = {};
bless $self, $class;
$self->_init(@_);
return $self;
}
还有我的_init(;@)
函数,初始化对象
my $self = shift;
if( @_ )
{
my %extra = @_;
@$self{keys %extra} = values %extra;
}
return;
我是不是用错了这两个功能?我用两条线开始每隔一个子
my $self = shift;
croak "instance method called for class" unless ref $self;
但每次我使用它时,我在 return 中只收到 syntax
/ String found where operator expected
错误。
因此我的问题是:我是否以正确的方式使用这两个功能?我一直认为我只需要初始化 $self
一次,就像我做的那样,并且可以为脚本的其余部分指向我想要的所有内容。
croak
默认不加载。您必须在包中 use Carp
才能使用它(请参阅 Carp)。
顺便说一句,方法调用会忽略原型。不要使用它们。 Don't use them for functions, either.
您可以使用 Class::Declare::Attributes 之类的东西来节省一些输入:
sub new :class {
...
}