我已经看过几个使用Perl模块的例子,我仍然无法做到正确.我正在学习本教程:http://www.perlmonks.org/?node_id = 102347.对于以下.pl和.pm文件,我打电话
$ perl Solver.pl
并有以下错误.
Undefined subroutine &main::mergeSort called at Solver.pl line 13.
Run Code Online (Sandbox Code Playgroud)
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 ###
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
:DEFAULT有一个内置的定义,优先于你的.它导出默认导出的所有符号,也就是说导出的所有符号@EXPORT.你应该用过:
our @EXPORT = qw( mergeSort );
our @EXPORT_OK = @EXPORT;
our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
use MergeSort; # Same as: use MergeSort qw( :DEFAULT );
Run Code Online (Sandbox Code Playgroud)
但我认为明确列出一个人的进口是一个好主意,所以我会用
our @EXPORT = qw( );
our @EXPORT_OK = qw( mergeSort );
our %EXPORT_TAGS = ( ALL => \@EXPORT_OK );
use MergeSort qw( mergeSort );
Run Code Online (Sandbox Code Playgroud)