如何将数组变量声明为模块范围内的全局变量

时间:2015-07-04 17:04:49

标签: perl module scope

我有一些代码我决定在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.

1 个答案:

答案 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;