正确使用此Perl模块

时间:2015-06-01 21:10:34

标签: 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.

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;

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