我怎么知道我的Perl脚本是否在Windows下运行?

什么是以编程方式确定Perl脚本是否在基于Windows的系统(Win9x,WinXP,Vista,Win7等)上执行的最佳方式?

在这里填空:

my $running_under_windows = ... ? 1 : 0; 

Solutions Collecting From Web of "我怎么知道我的Perl脚本是否在Windows下运行?"

来自perldoc perlvar

  • $OSNAME
  • $^O

在配置过程中确定的构建Perl副本的操作系统的名称。 该值与$Config{'osname'} 。 请参阅perlrun中的配置和-V命令行开关。

在Windows平台上, $^O并不是很有帮助:因为它总是MSWin32 ,所以它不能区分95/98 / ME / NT / 2000 / XP / CE / .NET。 使用Win32::GetOSName()Win32::GetOSVersion() (请参阅Win32和perlport )来区分变体。

 $^O eq 'MSWin32' 

(来源: perlvar页)

使用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()仍然会给你正确的答案。

这是非常快速和肮脏的,不敢打赌它是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!"; }