变量未扩展

时间:2019-05-12 17:04:16

标签: perl subroutine

变量没有被替换

即使在明确定义2变量之后,也不会被替换

sub updatekey{
    my $key_url = File::Spec->catfile($dir. "/keys/cert.key.$label.$type")        
    $eol = '';
    open(FILE, $key_url) or die "$!";
    my $key_file;
    while (read(FILE, $buf, 60*57)) {
        $keyfile = $key_file . encode_base64($buf,$eol);
    }
}

打开文件失败,因为没有替换$ type。如果我将行修改如下

my $key_url = File::Spec->catfile($dir. "/keys/cert.key.$label.pem")

一切正常。

1 个答案:

答案 0 :(得分:1)

这是非常基本的调试。

将此作为子例程的第一行添加到您的代码中:

if (defined $type) {
  print "\$type is undefined\n";
} else {
  print "\$type is '$type'\n";
}

这样,您将在尝试使用$type时确切地看到它的值。我希望您会看到“ $ type is undefined”或“ $ type is”。

然后,您的问题就变成了查找应该设置$type的位置,并弄清为什么没有发生这种情况。

另外两条建议:

  • 编写Perl程序时,在代码中(文件顶部附近)包含use strictuse warnings总是一个好主意,因为它们会发现大量基本的编程错误。
  • 以任何语言编程时,应确保任何子例程仅使用在参数中传递的变量或在子例程中声明的变量。使用全局变量(就像您在这里所做的那样)使代码的可移植性降低,调试起来更加困难。