perl函数定义失败,并带有未初始化的值

时间:2018-09-10 18:42:34

标签: perl

我的perl印章有些陈旧,因此我可能在这里确实缺少一些明显的东西,但是我在一些较旧的代码CGI代码中添加了一个小模块来重构通用功能。这是该模块的摘录,其中包括给我带来问题的部分:

package Common;

use strict;
use warnings;
use base 'Exporter';
our @EXPORT_OK = (&fail_with_error);

sub fail_with_error {
    my ($errmsg, $textcolor) = @_;
    my $output = printf("<p><font color=\"%s\">ERROR: %s </font>/<p>", $textcolor, $errmsg);
    print($output);
    exit(1);
}

当我直接使用perl Common.pm执行此模块时(或者当我只是在测试代码中导入函数而没有调用它时),我得到的是$errmsg和{{1 }}:

$textcolor

perl似乎在发出警告,因为它实际上是在执行子例程代码,但是子例程的性质是它是抽象的,因此可以正确传递不同的值吗?可以认为,不必通过解释器警告就必须填充这些,但是尽管如此,还是有问题。

我已经四处搜寻,但是这个错误非常普遍,因为在大多数情况下,变量实际上是未初始化的。我似乎找不到适用于这种情况的任何东西。

1 个答案:

答案 0 :(得分:8)

那是因为您不小心在@EXPORT_OK上填充了对fail_with_error:&fail_with_error的调用,而不是函数名。这会调用fail_with_errors并使用从当前@_填充的参数,而该参数恰好为空-因此自然地,两个变量都未初始化(并且函数也不会导出)。正确的分配仅使用子例程名称:

our @EXPORT_OK = qw( fail_with_error );