我试图在Perl中进行简单的模块使用:
火焰/下午:
package Flame::Text;
sub words { … }
1;火焰/问答下午:
package Flame::Query;
use Flame::Text qw(words);
sub parse_query { words(shift); }
parse_query 'hi';
1;为什么我会收到以下错误消息?
未定义的子例程
&Flame::Query::words在Flame/Query.pm第3行调用。
以下功能很好:
package Flame::Query;
use Flame::Text;
sub parse_query { Flame::Text::words(shift); }
parse_query 'hi';
1;发布于 2014-02-04 19:22:11
您从未从words包导入或导出Flame::Text子例程。语句use Some::Module @args等效于:
BEGIN {
require Some::Module;
Some::Module->import(@args);
}也就是说,使用指定的参数调用import方法。此方法通常会将各种符号从一个包导出到调用包中。
不要编写自己的import,而是可以从Exporter模块继承一个。此模块是通过在@EXPORT_OK全局变量中存储可导出符号来配置的。所以你的代码会变成:
package Flame::Text;
use parent 'Exporter'; # inherit from Exporter
our @EXPORT_OK = qw/words/; # list all subs which you want to export upon request
sub words { ... }现在,use Flame::Text 'words'将如预期的那样工作。
发布于 2014-02-04 19:21:24
你需要这样做
package Flame::Text;
use Exporter 'import'; # gives you Exporter's import() method directly
@EXPORT_OK = qw(words); # symbols to export on request由于perl默认不导出(或污染)命名空间
http://perldoc.perl.org/Exporter.html
别忘了
use strict; use warnings;在所有事情上,perl
https://stackoverflow.com/questions/21561226
复制相似问题