Perl 尝试使用ifdef时出现语法错误
我有: 我得到: C:\build.pl第6行“else”附近的语法错误 错误后开始不安全--编译在C:\build.pl第17行中止Perl 尝试使用ifdef时出现语法错误,perl,syntax-error,Perl,Syntax Error,我有: 我得到: C:\build.pl第6行“else”附近的语法错误 错误后开始不安全--编译在C:\build.pl第17行中止 您忘记关闭if(…){块,将}放在else之前;i、 例如,改变这一点: if($^O eq 'MSWin32'){ export WINDOWS=1 else{ export UNIX=1 } =begin WINDOWS use feature qw(switch); =cut =begin UNIX use Switch; =cut 为
您忘记关闭
if(…){
块,将}
放在else
之前;i、 例如,改变这一点:
if($^O eq 'MSWin32'){
export WINDOWS=1
else{
export UNIX=1
}
=begin WINDOWS
use feature qw(switch);
=cut
=begin UNIX
use Switch;
=cut
为此:
else{
在Perl程序中包含bourne shell命令。。。不太可能奏效
}else{
我不明白接下来会发生什么。然后,您将代码标记为文档,但这似乎不是您想要做的。您似乎正在尝试执行以下操作:
if ($^O eq 'MSWin32') {
$ENV{WINDOWS}=1;
}else{
$ENV{UNIX}=1;
}
但这毫无意义。交换机功能和交换机模块不能互换,并且都适用于Windows和非Windows系统。谢谢。我遇到了一个障碍,Unix perl已经过时,现在可能无法更新它。因此,我打算在Unix上使用switch sytax,在windows上使用give/When语法。因此,如果脚本中有$^O eq'MSWin32'语句,则会有多个
。可能不是一种很优雅的方式…事实上我的脚本现在还没有编译。。因此,整个问题可能都没有意义。正如我所说,交换机功能和交换机模块是不可互换的。我不仅可以在unix上使用交换机,然后使用某种ifdef来确定系统是否为unix,如果是,执行我的swich($action)。。。案例“废话”等
而不是给定的部分($action)。。。当(“废话”)等
?@MrDuk时,开关
功能是实验性的,switch.pm
的作者建议不要在生产代码中使用它。不仅如此,您还假设任何时候代码在*nix上运行时都会在旧版本的Perl上运行,这是一个糟糕的假设。只需使用if/elsif/else
,这不是实验性的或有缺陷的,可以在任何Perl上使用。如果你无论如何都要重写你的程序,重写它以使用If-elsif-else。使用switch(任何一个版本)都没有好处,而且它既不推荐使用,又是实验性的。
use if $^O eq 'MSWin32', 'feature', qw( switch );
use if $^O ne 'MSWin32', 'Switch';