正确使用此Perl模块

Kol*_*rie 1 perl 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.
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)

ike*_*ami 7

: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)