正确使用这个 Perl 模块
Properly Use this Perl Module
我看过几个使用 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;
:DEFAULT
有一个优先于您的内置定义。它导出默认导出的所有符号,即@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 );
我看过几个使用 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;
:DEFAULT
有一个优先于您的内置定义。它导出默认导出的所有符号,即@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 );