-1

我正在学习 Perl 对象。我在模块文件create_schedules.pm中编写了一个简单的构造函数:

#!/usr/bin/perl -w
#
package create_schedules;
use strict;
use warnings;
use diagnostics;
sub new {
    my $class = shift;
    my %params = @_;
    my $self=bless{
        _para1=>$params{'mypara1'},
        _para2=>$params{'mypara2'}
        },$class;
    return $self;
}
1;

我正在主文件main.pl中创建一个对象:

#!/usr/bin/perl -w
use strict;
use warnings;
use diagnostics;

use lib::my_module;

sub _start(){
    print "Main Function Started\n";
    create_schedules::new( 
        'mypara1' => 'This is mypara1', 
        'mypara2' => 'This is mypara2',
        );
}
_start();

当我运行 main.pl 时,我得到了以下错误:

Main Function Started
 Odd number of elements in hash assignment at lib/create_schedules.pm line 9 (#1)
 (W misc) You specified an odd number of elements to initialize a hash,
 which is odd, because hashes come in key/value pairs.
4

2 回答 2

5

您直接使用该函数,而不是作为对象:

create_schedules::new
               #^^-- this

代替

create_schedules->new

当你这样做时,这一行:

my $class = shift;

不包含对象,而是您的哈希分配的第一个元素。如果你删除一个元素,列表现在是一些奇数的元素。

尽管我确实注意到您的包名称不一样。您create_schedules在主模块和my_module模块中使用。

于 2013-09-11T11:33:38.197 回答
5

只需致电:

create_schedules->new
#   note     ___^^

一种旧的调用方式是:

new create_schedules(...);

为什么你的代码是错误的:

在您正在执行的新方法my $class = shift;中,之后@_将仅包含 3 个元素:

  1. '这是 mypara1',
  2. 'mypara2',
  3. '这是 mypara2',

然后该指令my %params = @_;将导致有关奇数个元素的警告。

于 2013-09-11T11:30:30.027 回答