Perl模块在Linux和Win32下运行

gra*_*ric 2 linux windows perl multiplatform

我有一个需要在Win32和Linux操作系统中运行的perl模块.此模块使用Win32 :: Process :: List来避免Win32下第三方应用程序的并发问题,并且在Linux下运行时没有相同的要求.

到目前为止,我已经设法拥有相同模块的两个副本,其中针对Linux版本注释了特定于Win32的内容 - 我显然对这种容易出错的方法不满意.

很明显,特定于win的东西不会在Linux中"make install".我在我的代码中尝试了一种更柔和的方法,require Win32::Process::List;而不是use Win32::Process::List;前者提供了传递的优势perl -c mymodule- 但是在常规使用中仍然失败.

因此我的问题是:除了保留两个不同的代码库之外,还有更强大的方法来处理这种情况吗?

Bor*_*din 5

如何使用if module,它允许您use根据编译时条件的模块.

use if $^O eq 'MSWin32', 'Win32::Process::List';
Run Code Online (Sandbox Code Playgroud)

$^O内置变量给出了操作系统的名称,并且总是MSWin32对任何Windows系统.

  • 这不是一个普通的Perl`if`声明.[`if`是一个模块](https://metacpan.org/module/if),为您提供了一个很好的语法 (2认同)