我已经看过几个使用Perl模块的例子,我仍然无法做到正确。我正在学习本教程:http://www.perlmonks.org/?node_id=102347。对于以下.pl和.pm文件,我调用
$ perl Solver.pl
并出现以下错误。
Undefined subroutine &main::mergeSort called at Solver.pl line 13.
Solver.pl
#!/usr/bin/perl
#Program usage: perl PROGRAM
#example:
#perl solver.pl
use strict;
use warnings;
use MergeSort qw(:DEFAULT);
### MAIN ###
mergeSort(\@list); #ERROR;
### END MAIN ###
MergeSort.pm
package MergeSort;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = ();
@EXPORT_OK = qw(mergeSort);
%EXPORT_TAGS = ( DEFAULT => [qw(&mergeSort)],
Both => [qw(&mergeSort &merge)]);
sub mergeSort{
...(defined here
}#end mergeSort()
sub merge{
...(defined here)
}#end merge()
1;
答案 0 :(得分:7)
@EXPORT
有一个内置定义,优先于你的定义。它导出默认导出的所有符号,即our @EXPORT = qw( mergeSort );
our @EXPORT_OK = @EXPORT;
our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
use MergeSort; # Same as: use MergeSort qw( :DEFAULT );
中的所有符号。你应该使用:
our @EXPORT = qw( );
our @EXPORT_OK = qw( mergeSort );
our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
use MergeSort qw( mergeSort );
但我认为明确列出一个人的进口是个好主意,所以我要用
UNION