有人可以指出我为什么不编译这个片段:
my $crond = "/etc/init.d/crond";
if( -e $crond ) {
my $d = "d";
}
my $crond = "/etc/init.d/cron$d";
错误:
"my" variable $crond masks earlier declaration in same scope at /home/andrew/sandbox/processes2cron.pl line 27.
Global symbol "$d" requires explicit package name at /home/andrew/sandbox/processes2cron.pl line 27.
我尝试使用'my'进行不同的变化,但仍然没有正确定义范围。感谢。
答案 0 :(得分:5)
您已在代码的第一行声明变量$crond
。通过在第5行重新声明它,您将失去先前的值。在这种情况下,删除第5行的my
将停止警告。
变量$d
在if块的范围内声明。这意味着它只能在if块结束之前访问。然后尝试在if块之外引用它,这会导致错误。要解决此问题,请在外部作用域中的if语句之前声明$d
。
答案 1 :(得分:4)
my $crond = "/etc/init.d/crond";
my $d;
if( -e $crond ) {
$d = "d";
}
$crond = "/etc/init.d/cron$d";
正如错误消息所说的那样。您在同一范围内重新声明$cron
,并且$d
仅在if
块中定义,因此编译器在您使用它时期望$d
成为全局变量在最后一行,当它找不到时抱怨。