以编程方式确定Perl脚本是否在基于Windows的系统(Win9x,Win XP,Vista,Win7等)上执行的最佳方法是什么?
在这里填空:
my $running_under_windows = ... ? 1 : 0;
答案 0 :(得分:15)
$OSNAME
$^O
在构建过程中确定的构建此Perl副本的操作系统的名称。该值与
$Config{'osname'}
相同。另请参阅perlrun中记录的Config和-V命令行开关。在Windows平台中,
$^O
不是很有帮助:因为它总是MSWin32
,所以它不能区分95/98 / ME / NT / 2000 / XP / CE /。净。使用Win32::GetOSName()
或Win32::GetOSVersion()
(请参阅Win32和perlport)来区分变体。
答案 1 :(得分:6)
$^O eq 'MSWin32'
(来源:perlvar
联机帮助页)
答案 2 :(得分:3)
使用Devel::CheckOS。它为您处理所有逻辑和特殊情况。我经常这样做:
use Devel::CheckOS qw(die_unsupported os_is);
die "You need Windows to run this program!" unless os_is('MicrosoftWindows');
'MicrosoftWindows'家族了解Cygwin之类的内容,因此如果您使用的是Windows而不是cmd提示符,os_is()
仍会给您正确答案。
答案 3 :(得分:-1)
这是非常快速和肮脏的,并且不会认为它100%便携,但仍然有用。 检查PATH Env变量中是否存在反斜杠,因为PATH对于Windows和Unix都是通用的。 所以 - 在Perl:
if ( $ENV{PATH}=~m{\\} ) {
#Quick and dirty: It's windows!
print "It's Windows!";
} else {
print "It's Unix!";
}