mxc*_*xcl 55 perl cross-platform
我在Mac,Windows和Ubuntu上安装了Perl.如何在脚本中告诉哪一个是哪个?提前致谢.
编辑:我被问到我在做什么.它是一个脚本,是我们跨平台构建系统的一部分.该脚本会递归目录并确定要构建的文件.有些文件是特定于平台的,因此,在Linux上我不想构建以_win.cpp结尾的文件等.
Rob*_*ble 78
检查$^O包含操作系统名称的变量:
print "$^O\n";
Run Code Online (Sandbox Code Playgroud)
linux在Linux和MSWin32Windows上打印.
use English qw' -no_match_vars ';
print "$OSNAME\n";
Run Code Online (Sandbox Code Playgroud)
根据perlport,$^O将darwin在Mac OS X上.
您还可以使用Config核心模块,它可以提供相同的信息(以及更多):
use Config;
print "$Config{osname}\n";
print "$Config{archname}\n";
Run Code Online (Sandbox Code Playgroud)
在我的Ubuntu机器上打印:
linux
i486-linux-gnu-thread-multi
Run Code Online (Sandbox Code Playgroud)
请注意,此信息基于构建 Perl的系统,这不一定是Perl当前正在运行的系统(对于$^O和$OSNAME)也是如此; 操作系统可能不会有所不同,但一些信息,如架构名称,可能很好.
Bra*_*ert 12
如果您需要有关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/;
}}
Run Code Online (Sandbox Code Playgroud)
源自sysinfo.t,我写了原始版本.
如果您需要更详细的信息:
my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
Run Code Online (Sandbox Code Playgroud)
查看源代码,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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61776 次 |
| 最近记录: |