哈希分配错误中的奇数元素

时间:2013-09-11 11:26:17

标签: perl

我正在学习Perl Objects。我在模块文件 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.

2 个答案:

答案 0 :(得分:5)

请致电:

create_schedules->new
#   note     ___^^

一种古老的打电话方式是:

new create_schedules(...);

为什么你的代码错了:

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

  1. '这是mypara1',
  2. 'mypara2',
  3. '这是mypara2',
  4. 然后指令my %params = @_;将引发关于奇数个元素的警告。

答案 1 :(得分:5)

您直接使用该功能,而不是作为对象:

create_schedules::new
               #^^-- this

而不是

create_schedules->new

当你这样做时,这一行:

my $class = shift;

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

虽然我注意到你的包名不一样。您在main中使用create_schedules,在模块中使用my_module