我是OO perl的新手。我想写一个简单的程序,但得到错误。
创建一个包Employee.pm为
package Employee;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
sub get_names {
my $self = @_;
print " getting the names \n";
return $self;
}
sub set_names {
my ($self, $last_name) = @_;
$self->{last_name} = $last_name;
return $self->{$last_name};
}
1;
并创建了一个.pl文件
use strict;
use warnings;
use Employee;
my $obj = new Employee("name" => "nitesh", "last_name" => "Goyal");
my $val = $obj->get_names();
print %$val;
my $setName = $obj->set_names("kumar");
print "$setName \n";
我收到错误
"Can't use string ("1") as a HASH ref while "strict refs" in use at class1.txt line 10."
答案 0 :(得分:2)
错误
"Can't use string ("1") as a HASH ref ..
来自这一部分:
sub get_names {
my $self = @_;
当数组放入标量上下文时,它返回其大小。因为你用
来调用sub$obj->get_names();
只传递一个参数,即对象,因此@_
包含1个参数,其大小为1,因此在子get_names
中,变量$self
设置为因此错误。你可能应该做的是
my $self = shift;
但是,那不会做任何事情,因为你从未在构造函数中存储过这些名称。正如mpapec
所说,你应该做
my $self = { @_ };
在构造函数子new
中。
此外,在get_names
中,您只需返回对象,这不是很有用。您应该返回$self->{name}
和$self->{last_name}
。