我如何检测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)