我是Perl的新手,我一直在读一本书。一切都很好,除了每当我尝试初始化一本如本书所示的变量时,我收到如下错误。请告诉我,为了避免这个错误,我该怎么做?
代码:
#!/usr/bin/perl -w
use 5.014;
use strict;
use utf8;
$radius = <STDIN>;
$circum;
if ($radius<0){
$circum = 0
} else{
$circum = 2*3.141*$radius;
}
print $circum."\n";
错误: 全局符号“$ radius”需要在./example1第6行显式包名。 全局符号“$ circum”需要在./example1第7行显式包名。 全局符号“$ radius”需要在./example1第8行显式包名。 全局符号“$ circum”需要在./example1第9行显式包名。 全局符号“$ circum”需要在./example1第11行显式包名。 全局符号“$ radius”需要在./example1第11行显式包名。 全局符号“$ circum”需要在./example1第14行显式包名。 由于编译错误,./example1的执行被中止。
另外,我在论坛的某处读到过“我们的”和“我的”关键字。使用这些似乎工作。但是,是否必须使用这些关键字。如果是这样的话,我认为这本书不包括它们很奇怪。
答案 0 :(得分:2)
问题是'使用严格'(这实际上是一件非常好的事情)。
结果是您的变量需要声明如下:
my $radius = <STDIN>;
在那里,'my'关键字使变量成为当前范围的本地变量。并且'使用严格;'说你必须声明所有变量并指定它们的范围。您想要声明变量的两种典型方法是:
my $localOnly;
our $shareableVariable;
基本上:当你不希望其他人访问变量时使用'my',当你想允许外部代码访问或设置变量时使用'my'。
答案 1 :(得分:1)
您已经(并接受)了解这个问题的答案。但值得提出另外两点。
首先,如果您不了解Perl错误消息,那么通常需要在代码中添加use diagnostics
。这将为您提供有关错误的更详细说明。在这种情况下,它会说:
(F)您已经说过&#34;使用严格的&#34;或&#34;使用严格的变量&#34;,表示 所有变量必须是词法范围的(使用&#34;我的&#34;或 &#34; state&#34;),事先使用&#34;我们的&#34;声明,或明确限定为 说出全局变量所在的包(使用&#34; ::&#34;)。
(顺便说一句,这显示了上一个答案中的小遗漏。)
其次,您是说您的图书推荐use strict
但是没有提到my
?这听起来很奇怪。无论如何,一本没有提到my
的Perl书并不是一本非常好的Perl书。请告诉我们标题,以便我们可以避免。