2009-09-14 14 views

Odpowiedz

15

Od perldoc perlvar:

  • $OSNAME
  • $^O

Nazwa systemu operacyjnego pod whic h ta kopia Perla została zbudowana, jak ustalono podczas procesu konfiguracji. Wartość jest identyczna z $Config{'osname'}. Zobacz także Config i przełącznik linii poleceń -V udokumentowany w perlrun.

Na platformach Windows $^O nie jest bardzo pomocny: ponieważ zawsze jest to MSWin32, nie odróżnia go od 95/98/ME/NT/2000/XP/CE/.NET. Użyj Win32::GetOSName() lub Win32::GetOSVersion() (patrz Win32 i perlport), aby odróżnić warianty.

+0

Doskonała! Dzięki! – knorv

+1

A co z Cygwin? $^O = 'cygwin' – mob

+0

@mobrule - Jeśli używamy Cygwin, czy to ma znaczenie? Nie mam Windowsa, żeby to przetestować, ale jeśli korzystasz z Cygwina, w zasadzie uzyskujesz najlepsze z obu słów (w większości), więc to naprawdę nie powinno mieć znaczenia. Jeśli chcesz wiedzieć, jak Cygwin wpływa na '$^O', powinieneś uruchomić Perla pod Cygwin i dowiedzieć się. –

6
$^O eq 'MSWin32' 

(Źródło: perlvar podręcznika)

3

Zastosowanie Devel::CheckOS. Obsługuje wszystkie logiczne i specjalne przypadki dla ciebie. Zwykle zrobić coś takiego:

use Devel::CheckOS qw(die_unsupported os_is); 

die "You need Windows to run this program!" unless os_is('MicrosoftWindows'); 

rodzin „Microsoft Windows” wie o rzeczach takich jak Cygwin, więc jeśli jesteś na Windows, ale nie w CMD szybka, os_is() będzie nadal daje właściwą odpowiedź.

-1

Jest to bardzo szybkie i brudne, i nie można się założyć, że jest w 100% przenośne, ale nadal przydatne w szczypie. Sprawdź, czy nie występują ukośniki odwrotne w zmiennej PATH Env, ponieważ PATH jest wspólna dla systemów Windows i Unix. Tak - w Perlu:

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

O ile, oczywiście, nie jesteś na Cygwin. Wtedy twój kod błędnie myśli, że działa w systemie Unix. – tjd

Powiązane problemy