我是这个网站的新手,所以请耐心等待,如果这个问题已经在其他地方得到了回答。我想调用一个子程序" bar"来自一个模块" codons1.pm" ,我遇到了错误: 无法定位对象方法" bar"通过包" codons1.pm" (也许你忘了加载" codons1.pm"?)。主要脚本如下:
use strict;
use warnings;
my $i = 1;
my $pack = "codons$i\.pm";
require $pack;
(my %temp) = $pack->bar();
print keys %INC ;
感谢(Perl objects error: Can't locate object method via package),我能够使用%INC验证模块是否已加载。 该模块看起来像:
package codons1;
sub bar{ #some code;
return (%some_hash);}
1;
我正在使用$ i,以便我可以通过循环加载多个类似的模块。任何建议都是受欢迎的,并且非常感谢。
答案 0 :(得分:4)
您的资料包是codons1
,而您正试图致电codons1.pm->bar
。以下任何一种都可以正常工作:
my $pack = "codons$i";
require "$pack.pm";
$pack->bar();
或
my $pack = "codons$i";
eval "require $pack";
$pack->bar();
答案 1 :(得分:2)
更好的方法来做你想要实现的目标
#!/usr/bin/perl
use strict;
use warnings;
package codons1;
sub new {
my $class = shift;
return bless {}, $class;
}
sub bar {
my %some_hash = (temperature=>"35");
return %some_hash;
}
1;
package main;
my $object = codons1->new(); #creates the object of codons1
my %temp = $object->bar(); #call the bar method from codons1's object
print keys %temp;
您需要在Perl中学习基本的面向对象编程。从perlootut开始,然后是perlobj。从免费提供的Beginning Perl书中阅读Object Oriented Perl chapter。