gpt4 book ai didi

perl - 未定义的子程序调用

转载 作者:行者123 更新时间:2023-12-04 05:18:12 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Perl - Package/Module Issues

(4 个回答)


8年前关闭。




我正在尝试在 Perl 中使用简单的模块:

火焰/文本.pm:

package Flame::Text;
sub words { … }
1;

火焰/查询.pm:
package Flame::Query;
use Flame::Text qw(words);
sub parse_query { words(shift); }
parse_query 'hi';
1;

为什么我会收到以下错误消息?

Undefined subroutine &Flame::Query::words called at Flame/Query.pm line 3.



以下工作正常:
package Flame::Query;
use Flame::Text;
sub parse_query { Flame::Text::words(shift); }
parse_query 'hi';
1;

最佳答案

您从未导入或导出 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'将按预期工作。

关于perl - 未定义的子程序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com