如何在Perl中检测操作系统,然后有条件地执行命令?

时间:2011-03-03 14:40:20

标签: perl operating-system detection

在“How can I detect the operating system in Perl”上发现了这个问题 - 但我需要检测操作系统的Perl片段,然后将该值用于OS-A或OS-B的条件执行代码;在这种情况下,那些是Windows7和CentOS-5.5。

问题,反馈,请求 - 只是评论,谢谢!!

3 个答案:

答案 0 :(得分:4)

看看File::Spec是如何做到的。

Here.


回答评论:

我不是说加载File :: Spec。我在说它是如何进行“子分类”的。真的,它有点像这样:

  • 对象做多态。
  • 多态性是满足您需求的最简单方法。
  • 创建一般的实施模式,
  • 然后实现 将要使用它的那些平台。

File :: Spec尝试全部执行,因为它是一个CPAN模块。但只需看看它是如何做到的,看看它如何平台折叠成案例。因为它是核心和推荐的模块,所以你可能不会在模式之后出错。

如果您的平台不适合此模式,那么您将不得不使用其他方法来嗅出平台。文件系统差异可能不是您唯一需要担心的。

确切地说,我对FS实现多态的方式并不完全满意。但 是一种策略。以及处理具有多态性的平台的示例。

仅供讨论:我更喜欢额外的课程。我将所有FS实现基于抽象类。最重要的是,我将该行为子类化为实现,基于,我将把我最喜欢的模式之一Facade / Factory类作为该类的公共面。

答案 1 :(得分:4)

您可以使用这样的调度表:

my %callback = (
    MSWin32 => sub { win_code() },
    linux   => sub { linux_code() },
);

# run appropriate code
$callback{$^O}->();

答案 2 :(得分:2)

当然,$ ^ O是对此的最终答案。但是你可能想看Devel::CheckOS,它会给它一个友好的包装。