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

MrD*_*Duk -2 perl syntax-error

我有:

if($^O eq 'MSWin32'){
  export WINDOWS=1
else{
  export UNIX=1
}

=begin WINDOWS
  use feature qw(switch);
=cut
=begin UNIX
  use Switch;
=cut
Run Code Online (Sandbox Code Playgroud)

我得到:

C:\ build.pl第6行的语法错误,"else"附近BEGIN错误后不安全 - 编译在C:\ build.pl第17行中止.

ike*_*ami 8

在Perl程序中包含bourne shell命令......不太可能正常工作.

if ($^O eq 'MSWin32') {
   $ENV{WINDOWS}=1;
}else{
   $ENV{UNIX}=1;
}
Run Code Online (Sandbox Code Playgroud)

我不明白接下来的内容.然后,您将代码标记为文档,但这似乎不是您要执行的操作.您似乎正在尝试执行以下操作:

use if $^O eq 'MSWin32', 'feature', qw( switch );
use if $^O ne 'MSWin32', 'Switch';
Run Code Online (Sandbox Code Playgroud)

但这没有任何意义.交换机功能和交换机模块绝不可互换,并且都可以在Windows和非Windows系统上运行.

  • @MrDuk"switch"功能是实验性的,"Switch.pm"的作者建议不要在生产代码中使用它.不仅如此,而且你假设你的代码在*nix上运行的任何时候都会在旧版本的Perl上运行,这是一个可怕的假设.只需使用`if/elsif/else`,它不是实验性或错误的,可以在任何Perl上运行. (3认同)
  • 就像我说的那样,交换机功能和交换机模块绝不可互换 (2认同)