Typeglob不能严格使用

时间:2017-09-15 07:37:11

标签: perl

我理解符号和typeglob是如何工作的,但是我无法理解何时使用这些符号和类型因为use strict下无法使用typeglobs。

有人可以解释一下吗?

#!/usr/bin/perl

use warnings;
#use strict;

$spud = 'wow';
@spud = qw(foo bar);
*potato = *spud;

print "$potato\n";
编辑:我很抱歉。我在酒店房间,我没有想到也没有验证代码就输入了这个问题。我看到两个错误。一个我没有发布正确的代码,也有人指出我的错误检查是不准确的。我应该得到所有的反对票,因为这是一个不应该提出问题的经典案例。

1 个答案:

答案 0 :(得分:1)

您的代码中的错误是因为您使用了未声明的变量,并且与typeglobs无关

如果我只是使用our声明所有变量并恢复use strict,那么您的代码可以正常运行

 #!/usr/bin/perl

use strict;
use warnings;

our $spud = 'wow';
our @spud = qw(foo bar);

our ($potato, @potato);

*potato = *spud;

print "$potato\n";
print "@potato\n";

输出

wow
foo bar

Typeglobs只包含变量,因此我必须使用our而不是my才能使其生效。应尽可能避免包变量,但是对于词法变量的别名需要不同的技术

别名很少是必要或有用的,它可以很容易地用一段简单的代码制作迷宫。它有用的一个地方是从另一个包导入子例程(所有已命名的子例程都有包标识符)但核心Exporter模块实现了导入过程的丑陋内容,除非你有特殊要求,否则应该总是使用它那Exporter不能满足