我有一些代码我决定在perl中插入一个模块。我承认我正在做一些猴子 - 看到我在网上发现的文件之后做的猴子事。
只有一个公开可见的子程序,它设置2个变量*希望在模块中的其他子程序中使用,而不将它们作为参数显式传递 - $ fname和@lines。在线查看我想出了“我的”关键字,但是当我尝试在全局级别声明它们时(请参阅下面的代码片段),我收到以下错误:
mig_tools.pm did not return a true value at
我通过在每个使用它们的子程序中声明“我们的$ fname”和“我们的@lines”来解决这个问题,但我更愿意在全局范围内声明它们一次。这可能吗?
以下是我作为代码相关部分的内容。
package mig_tools;
require Exporter;
use strict;
use warnings;
our @ISA = qw(Exporter);
our @EXPORT = qw( ensure_included);
our $fname;
our @lines;
// definitions of already_has_include find_include_insert_point and ensure_included.
答案 0 :(得分:2)
全小写变量保留用于本地标识符和pragma名称。您的模块应位于MigTools.pm
,您应该将其与use MigTools
did not return a true value
错误只是因为您的模块文件在执行时没有返回 true 值。通常在所有模块的末尾添加一行仅包含1;
的行
您的MigTools.pm
应如下所示。最好直接从import
使用Exporter
而不是对其进行子类化,our
无法帮助您创建全局变量,但我有点担心你为什么以这种方式构建模块
package MigTools;
use strict;
use warnings;
use Exporter qw/ import /;
our @EXPORT = qw/ ensure_included /;
my ($fname, @lines)
sub ensure_included {
}
sub already_has_include {
}
sub find_include_insert_point {
}
sub ensure_included {
}
1;