这是我在Perl中做的第一件事,因此,如果问题有点愚蠢,请原谅我。
我想尝试一下A *寻路算法。我找到了AI::Pathfinding::AStar CPAN模块,基本上是想使给定的示例正常工作。
首先,我将示例分成两个文件,因为我无法弄清楚如何使use My::Map::Package;
在单个文件中适用于所有内容。我提出了以下两个文件:
MyAstar.pm:
package MyAstar;
use warnings;
use strict;
use base "AI::Pathfinding::AStar";
my %NODES = get_all_nodes();
sub get_all_nodes {...}
sub getSurrounding {...}
main.pl:
#!/usr/bin/env perl
package main;
use lib '/home/foo/astar/';
use warnings;
use strict;
use MyAstar;
my $map = MyAstar->new or die "No map for you!";
my $path = $map->findPath(1, 5);
print join(', ', @$path), "\n";
执行main.pl时出现以下错误:
在包main.pl的第9行中无法通过包“ MyAstar”找到对象方法“ new”。
我不确定这是什么问题。我本来希望在new
包中有一个名为AI::Pathfinding::AStar
的子例程,但是找不到它。 CPAN模块是否损坏或我做错了什么?
答案 0 :(得分:2)
您尝试调用一个函数(MyAstar->new
,通常用作构造函数),但未定义它。 Perl中没有默认的构造函数(例如在Java中)。
向您的MyAstar.pm添加类似内容:
sub new {
my $class = shift;
my $self = bless{}, $class;
# initialize $self here as needed, maybe using any passed arguments in @_
return $self;
}