perl 调用对象问题

herogold007 2009-03-16 11:06:29
两个文件Race.pl,Main.pl
Race.pl :

package Race;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(fight, sleeps);

sub fight {
my($something) = @_;
print "fight $something";
}

sub sleeps {
print "sleep!!!";
}

Main.pl :

use strict;
use Race;
require "Race.pl";

sub main {
my $race = new Race;
$race -> fight("Orc");
}

这两个文件都在同一目录下,在控制台perl Main.pl时,报错,Can't locate Race.pm in @INC。
怎么设置,才能正确调用?

...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
herogold007 2009-03-16
  • 打赏
  • 举报
回复
Race.pl已经改成了Race.pm
在Main.pl里面,改为了

use strict;
use Race;

sub main {

my $race = new Race;
$race -> fight("Orc");
}

在控制台输入perl Main.pl,结果什么也没显示。这是什么原因?
fibbery 2009-03-16
  • 打赏
  • 举报
回复


要么require要么use,这个你得统一呀。

如果使用use,你该使用Race.pm而不是Race.pl定义包文件名。

fibbery 2009-03-16
  • 打赏
  • 举报
回复
你可以安装一个ActivePerl,查看安装的文档,其中perlfunc中包含了所有内建函数的说明,并且,使已经分类的。关于字符串的函数,你可以参考perlfunc文档中的Functions for SCALARs or strings部分的说明。
herogold007 2009-03-16
  • 打赏
  • 举报
回复
太感谢了。公司要用perl开发后台,以前从没接触过perl,您能不能给我提点建议,我以前是学JAVA的。

还有perl对字符串操作我还不是很懂。做了几个类似JAVA的操作字符串方法,像indexOf()、lastIndexOf()、substring(), perl有没有好的操作字符串的函数。
fibbery 2009-03-16
  • 打赏
  • 举报
回复
你的问题出在,没有new函数,因此也就没有返回包的引用,所以,就无法调用fight方法。

你需要注意的是:
1、使用$pkg_ref->method时,第一个参数是包的引用,随后才使在调用是客户代码传入的参数;
2、使用-w参数执行perl脚本或者在脚本中加入use warnings;来使你的脚本更加健壮;
3、new中可以bless一个引用,当然也可以不bless任何引用,但,必须返回包的引用,即new方法的第一个参数。
fibbery 2009-03-16
  • 打赏
  • 举报
回复
sub new中的$self是为了Race包的属性而声名,是一个哈希引用。
fibbery 2009-03-16
  • 打赏
  • 举报
回复

# Race.pm
use strict;
use warnings;

package Race;

sub new
{
my $self={};
bless $self,shift;
return $self;
}

sub fight
{
my($self,$something) = @_;
print "fight $something";
}

1;



#main.pl
use strict;
use warnings;

use Race;

my $race=new Race;
$race->fight("Orc");

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧