如何禁用Perl中的代码块(如C中的#ifdef)?

如何禁用Perl中的代码块(如C中的#ifdef)?,perl,Perl,我需要阻止Perl脚本中的代码片段,就像在C中使用#ifdefs所做的那样: #define ANDROID true #ifdef ANDROID # Execute code for Android only #else # Execute code for Linux, Windows and other platforms #endif 如何在Perl中实现这一点?我们需要对脚本进行尽可能少的更改(大约有1000个脚本,我们需要让代码尽可能通用)。因此,我只

我需要阻止Perl脚本中的代码片段,就像在C中使用
#ifdef
s所做的那样:

#define ANDROID true

#ifdef ANDROID
      # Execute code for Android only 
#else
      # Execute code for Linux, Windows and other platforms
#endif

如何在Perl中实现这一点?我们需要对脚本进行尽可能少的更改(大约有1000个脚本,我们需要让代码尽可能通用)。因此,我只需要知道实现类似于C中的#ifdefs的最佳机制是什么。

从您的评论来看,您似乎在寻找一种方法,使代码可移植,在操作系统更改时运行不同的代码。如果是,您可以使用:


“代码块”是什么意思?有条件地执行?使用
if(defined…
不如C的
#ifdef
灵活。例如,如果可选块都定义了一个函数
foo
,您将得到一条
子例程foo重定义的消息。如果您发布您试图用它实现的内容,可能会有人给您提供一个很好的替代解决方案。在Perl中完成事情的方法总是很多,因此,您应该询问需要解决的特定可移植性问题,而不是要求使用另一种语言(Perl中不存在这种语言)的工具。这是一个XY问题。该编辑无效。请花点时间阅读我的评论并回复,你会得到帮助的。如果没有,你就不会。您的调用。最好定义常量,如
use constant IS_ANDROID=>($^O eq“ANDROID”)if(IS_ANDROID){…}
中使用它们。这将允许在编译时优化指定给其他平台的任何代码块。。。。我要补充的是C示例中发生的事情。与其他平台无关的代码不会被编译。很好地解释了这个问题。
if
pragma也很有用,例如
use if$^O eq'Android',MyModule::Android'
与Borodin一样,我会将特定于操作系统的代码移动到共享一个公共接口的单独模块中。
if    ($^O eq "Android") {     # run Android code
    ....
}
elsif ($^O eq "MSWin32") {     # run windows code
    ....
}
else { 
    ...
}