我正在学习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.
答案 0 :(得分:5)
请致电:
create_schedules->new
# note ___^^
一种古老的打电话方式是:
new create_schedules(...);
为什么你的代码错了:
在您正在进行的新方法中my $class = shift;
,之后,@_
将只包含3个元素:
然后指令my %params = @_;
将引发关于奇数个元素的警告。
答案 1 :(得分:5)
您直接使用该功能,而不是作为对象:
create_schedules::new
#^^-- this
而不是
create_schedules->new
当你这样做时,这一行:
my $class = shift;
不包含对象,而是哈希赋值的第一个元素。如果你删除一个元素,列表现在是一些奇数的元素。
虽然我注意到你的包名不一样。您在main中使用create_schedules
,在模块中使用my_module
。