Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 尝试使用ifdef时出现语法错误_Perl_Syntax Error - Fatal编程技术网

Perl 尝试使用ifdef时出现语法错误

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 为

我有:

我得到:

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
为此:

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';