正确使用这个 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 );