定义变量范围时的编译错误

And*_*rew 0 perl

有人可以指出我为什么不编译这个片段:

my $crond = "/etc/init.d/crond";
if( -e $crond ) {
    my $d = "d";
}
my $crond = "/etc/init.d/cron$d";
Run Code Online (Sandbox Code Playgroud)

错误:

"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.
Run Code Online (Sandbox Code Playgroud)

我尝试使用'my'进行不同的变化,但仍然没有正确定义范围.谢谢.

a'r*_*a'r 5

您已$crond在代码的第一行声明了该变量.通过在第5行重新声明它,您将失去先前的值.在这种情况下,删除第my5行将停止警告.

该变量$d在if块的范围内声明.这意味着它只能在if块结束之前访问.然后尝试在if块之外引用它,这会导致错误.要解决此问题,请$d在外部作用域中的if语句之前声明.