Perl 定义变量作用域时发生编译错误
有人能告诉我为什么没有编译这个片段吗Perl 定义变量作用域时发生编译错误,perl,Perl,有人能告诉我为什么没有编译这个片段吗 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 sym
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”的不同变体,但范围的定义仍然不正确。谢谢
my $crond = "/etc/init.d/crond";
my $d;
if( -e $crond ) {
$d = "d";
}
$crond = "/etc/init.d/cron$d";
正如错误信息所说的那样。您正在同一范围内重新定义
$cron
,而$d
仅在if
块中定义,因此编译器希望$d
在最后一行使用时是全局变量,当它找不到时会抱怨。您已经在代码的第一行声明了变量$crond
。通过在第5行重新声明,您将丢失以前的值。在这种情况下,删除第5行的my
将停止警告
变量$d
在if块的范围内声明。这意味着它只能在if块结束之前访问。然后尝试在if块之外引用它,这会导致错误。要解决此问题,请在外部范围中的if语句之前声明$d
。您可以说生成更详细的警告/错误