Perl - 全局变量需要显式包

时间:2013-12-13 07:48:34

标签: perl

我是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的执行被中止。

另外,我在论坛的某处读到过“我们的”和“我的”关键字。使用这些似乎工作。但是,是否必须使用这些关键字。如果是这样的话,我认为这本书不包括它们很奇怪。

2 个答案:

答案 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书。请告诉我们标题,以便我们可以避免。