2009-09-14 13 views

答えて

15

  • $OSNAME
  • $^O

をwhic下のオペレーティングシステムの名前h設定プロセス中に決定されるように、このPerlのコピーがビルドされました。値は$Config{'osname'}と同じです。 Configとperlrunで説明されている-Vコマンドラインスイッチも参照してください。

$^Oは、常にMSWin32なので、95/98/ME/NT/2000/XP/CE/.NETの違いはわかりません。変形例を区別するためにWin32::GetOSName()またはWin32::GetOSVersion()Win32およびperlportを参照)を使用してください。

+0

優秀!ありがとう! – knorv

+1

Cygwinについてはどうですか? $^O = 'cygwin' – mob

+0

@mobrule - Cygwinを使用している場合は重要ですか?私はそれをテストするためのWindowsボックスを持っていませんが、Cygwinを使用している場合は、基本的に両方の単語(ほとんどの部分)の最高を得るので、本当に問題ではありません。 Cygwinが '$^O'に与える影響を知りたければ、Cygwinの下でPerlを実行して調べるべきです。 –

6
$^O eq 'MSWin32' 

(出典:perlvar manページ)

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のようなものを知っているので、あなたは、CMDプロンプトでWindowsの上にあるではない場合、os_is()はまだあなたに正しい答えを与えるだろう。

-1

これは非常に速く汚れていて、100%携帯可能だとは思っていませんが、ピンチでも便利です。 PATHがWindowsとUnixの両方に共通であるため、PATH Env変数にバックスラッシュが存在するかどうかを確認します。 so-in Perl:

if ($ENV{PATH}=~m{\\}) { 
    #Quick and dirty: It's windows! 
    print "It's Windows!"; 
} else { 
    print "It's Unix!"; 
} 
+0

もちろん、あなたはcygwinにいます。それであなたのコードは、それがunixを実行していると誤って考えています。 – tjd

関連する問題