当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Perl中检测操作系统?》经验,为你挑选了4个好方法。

我在Mac,Windows和Ubuntu上安装了Perl.如何在脚本中告诉哪一个是哪个?提前致谢.

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



1> Robert Gambl..:

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

print "$^O\n";

linux在Linux和MSWin32Windows上打印.

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

use English qw' -no_match_vars ';
print "$OSNAME\n";

根据perlport,$^Odarwin在Mac OS X上.


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

use Config;

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

在我的Ubuntu机器上打印:

linux
i486-linux-gnu-thread-multi

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


超过两个; 有一个dos端口,os2端口曾经能够在Windows上运行.$ ^ O的所有可能值理论上都记录在中.
谢谢:)对于可能使用此答案的其他人,cygwin perl返回"cygwin",因此Windows有两种可能性.
如果有人因为你的'STDOUT_TOP0`作为输出而暂时停留在此,请确保你使用`$ ^ O`而不是`$ ^ 0`.我无法告诉你我是怎么知道的,但请相信我......

2> Brad Gilbert..:

如果您需要有关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();



3> Leon Timmerm..:

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



4> brian d foy..:

查看源代码,File::Spec了解它如何根据操作系统加载正确的委托.:)

File::Spec每个操作系统都有一个单独的Perl模块文件.File::Spec::Win32,File::Spec::OS2等...

它会检查操作系统,并.pm在运行时根据操作系统加载相应的文件.

# From the source code of File::Spec
my %module = (
      MSWin32 => 'Win32',
      os2     => 'OS2',
      VMS     => 'VMS',
      NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
      symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
      dos     => 'OS2',   # Yes, File::Spec::OS2 works on DJGPP.
      cygwin  => 'Cygwin',
      amigaos => 'AmigaOS');


my $module = $module{$^O} || 'Unix';

require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有