2

我是 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."
4

1 回答 1

2

错误

"Can't use string ("1") as a HASH ref ..

来自这部分:

sub get_names {
    my $self = @_;

当一个数组被放入标量上下文时,它返回它的大小。既然你用

$obj->get_names();

只传递了一个参数,即对象,因此@_包含 1 个参数,其大小为 1,因此在 subget_names中,变量$self设置为 1。因此出现错误。你可能应该做的是

my $self = shift;

但是,那不会做任何事情,因为您从未将名称存储在构造函数中。如前所述mpapec,你应该做

my $self = { @_ }; 

在构造函数 subnew中。

此外,在 中get_names,您只需返回对象,这不是很有用。您也许应该返回$self->{name}and $self->{last_name}

于 2013-09-28T10:50:43.040 回答