Perl:无法通过包找到对象方法栏

时间:2014-06-15 09:06:04

标签: perl perl-module

我是这个网站的新手,所以请耐心等待,如果这个问题已经在其他地方得到了回答。我想调用一个子程序" 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,以便我可以通过循环加载多个类似的模块。任何建议都是受欢迎的,并且非常感谢。

2 个答案:

答案 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;

Demo

您需要在Perl中学习基本的面向对象编程。从perlootut开始,然后是perlobj。从免费提供的Beginning Perl书中阅读Object Oriented Perl chapter