我理解符号和typeglob是如何工作的,但是我无法理解何时使用这些符号和类型因为use strict
下无法使用typeglobs。
有人可以解释一下吗?
#!/usr/bin/perl
use warnings;
#use strict;
$spud = 'wow';
@spud = qw(foo bar);
*potato = *spud;
print "$potato\n";
编辑:我很抱歉。我在酒店房间,我没有想到也没有验证代码就输入了这个问题。我看到两个错误。一个我没有发布正确的代码,也有人指出我的错误检查是不准确的。我应该得到所有的反对票,因为这是一个不应该提出问题的经典案例。
答案 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
不能满足