我如何检测Perl中的操作系统?

我在Mac,Windows和Ubuntu上有Perl。 我怎么能从剧本中知道哪一个是哪个? 提前致谢。

编辑:我被问到我在做什么。 它是一个脚本,是我们跨平台构建系统的一部分。 该脚本递归目录并计算出要构建的文件。 有些文件是特定于平台的,因此,在Linux上,我不想生成以_win.cpp结尾的文件等。


检查将包含操作系统名称的$^O变量:

print "$^On";

它打印linux Linux和MSWin32在Windows上。

如果您使用英语模块,也可以通过名称$OSNAME引用此变量:

use English qw' -no_match_vars ';
print "$OSNAMEn";

根据perlport的说法,在Mac OS X上$^O将是darwin


您也可以使用Config核心模块,它可以提供相同的信息(以及更多):

use Config;

print "$Config{osname}n";
print "$Config{archname}n";

在我的Ubuntu机器上打印:

linux
i486-linux-gnu-thread-multi

请注意,这些信息基于Perl构建的系统,不一定是Perl正在运行的系统(对于$^O$OSNAME也是如此); 操作系统不会有所不同,但一些信息,如架构名称,可能会很好。


如果您需要Windows上的更多特定信息,这可能会有所帮助。

my $osname = $^O;


if( $osname eq 'MSWin32' ){{
  eval { require Win32; } or last;
  $osname = Win32::GetOSName();

  # work around for historical reasons
  $osname = 'WinXP' if $osname =~ /^WinXP/;
}}

从我编写的原始版本sysinfo.t派生而来。

如果您需要更详细的信息:

my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();

Sys :: Info :: OS看起来像一个相对干净的潜在解决方案,但目前似乎不支持Mac。 尽管如此,添加它应该不是太多工作。

链接地址: http://www.djcxy.com/p/9247.html

上一篇: How can I detect the operating system in Perl?

下一篇: What's the best way to check if a file exists in C? (cross platform)