在Perl中如何检测操作系统?

63

我在 Mac、Windows 和 Ubuntu 上都有 Perl。如何在脚本内部区分它们?

编辑:有人问我在干什么。这是一个脚本,是我们跨平台构建系统的一部分。该脚本递归遍历目录并确定要构建哪些文件。某些文件是特定于某些平台的,因此,在 Linux 上,我不想构建以 _win.cpp 结尾的文件等。


1
你为什么需要知道呢?根据你所做的与平台相关的工作,可能会有更合适的答案。 - Rob
11个回答

-3

使用 Config 模块可能是一个好选择。另外一种可能是从 /etc/*release 文件中获取信息。

例如:

cat /etc/os-release

NAME="UBUNTU"
VERSION="12.0.2 LTS, Precise Pangolin"
ID="UBUNTU"
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.0.2 LTS)"
VERSION_ID="12.04"

2
那么Windows呢? - Toto
@M42 使用Win32; #与win32 API交互的模块。<br/> Win32::GetOSName() - 将返回操作系统名称<br/> Win32::GetOSVersion()<br/> [CORE] 返回列表(STRING, MAJOR, MINOR, BUILD, ID),其中元素分别是:任意描述字符串,操作系统的主要版本号,次要版本号,构建号和表示实际操作系统的数字。<br/>您将获得这样的输出<br/> http://s21.postimg.org/ymuhihbsn/win32_os_info_perl.jpg<br/> 有关Win32模块的更多信息:<br/>http://search.cpan.org/~jdb/Win32-0.47/Win32.pm - GC 13
当然可以,但是并不存在名为/etc/os-release的文件,并且你事先也不知道你在哪个平台上。 - Toto
1
我认为你没有理解这个问题。它问的是:“如何在Perl中检测操作系统?”你的解决方案并没有回答这个问题。 - Toto
对不起,我在编辑模式下,嗨@M42,Unix和DOS家族有很多不同之处。 对于Windows,在cmd.exe上键入msinfo32或将o / p重定向到文件 msinfo32 /nfo C:\ TEMP \ windows_info.nfo - GC 13
@M42,这也会有所帮助my ( $osvername, $major, $minor, $build, $id ) = Win32::GetOSVersion(); print "\n\n操作系统版本 - $osvername\n主版本号 - $major\n次版本号 - $minor\n构建版本号 - $build\nID - $id \n\n"; - GC 13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接