如何检测Perl中的OS名称到特定版本?

use*_*873 3 unix linux perl solaris

我试图寻找一个如何做到这一点的答案,但我似乎无法找到一个.我知道要在perl中找到操作系统名称,你可以使用

$^O 
Run Code Online (Sandbox Code Playgroud)

但是在Linux和Solaris中,无论您使用的操作系统版本如何,它都将返回Solaris或Linux.我希望它显示为Solaris10或Solaris11.有没有办法得到这个?我知道你是否进入

uname -r
Run Code Online (Sandbox Code Playgroud)

您可以获取版本号(例如Solaris中的5.10).有关如何做到这一点的任何想法?

谢谢=)

Pet*_*esh 6

POSIXperl中的模块提供uname调用,因此:

use POSIX qw(uname);
my @uname = uname();
print $uname[0] . " " . $uname[2];
Run Code Online (Sandbox Code Playgroud)

这提供了来自正在运行的系统的信息,而不是来自执行构建的系统(Config结果来自的位置)的信息.

一般来说,这个信息是kernel发布,而不是产品的营销版本,所以例如,这不会告诉你它是否是一个Linux Mint系统,只是它是一个运行3.2.foo内核的Linux系统.

对于基于lsb的Linux系统,lsb_release命令可以在我拥有的linux系统上提供此信息:

natsu ~> lsb_release  -r
Release:    12.04
natsu ~> lsb_release  -i
Distributor ID: Ubuntu
Run Code Online (Sandbox Code Playgroud)

此信息位于/etc/lsb-release文件中.

对于Solaris,版本信息位于/etc/release文件中.第一行包含操作系统的名称,例如Solaris 10 9/10.此文件中有多行,它更像是一个自由格式的文本字段.