2009-09-14 16 views

risposta

15

Da perldoc perlvar:

  • $OSNAME
  • $^O

Il nome del sistema operativo in whic h questa copia di Perl è stata creata, come determinato durante il processo di configurazione. Il valore è identico a $Config{'osname'}. Vedi anche Config e l'opzione -V della riga di comando documentata in perlrun.

Nelle piattaforme Windows, $^O non è molto utile: poiché è sempre MSWin32, non indica la differenza tra 95/98/ME/NT/2000/XP/CE/.NET. Utilizzare Win32::GetOSName() o Win32::GetOSVersion() (vedere Win32 e perlport) per distinguere tra le varianti.

+0

Eccellente! Grazie! – knorv

+1

Che ne dici di Cygwin? $^O = 'cygwin' – mob

+0

@mobrule - Se stiamo usando Cygwin, importa? Non ho una casella di Windows per testarlo, ma se usi Cygwin ottieni fondamentalmente il meglio di entrambe le parole (per la maggior parte), quindi non dovrebbe importare. Se vuoi sapere come influenza Cygwin '$^O' devi eseguire Perl sotto Cygwin e scoprirlo. –

6
$^O eq 'MSWin32' 

(Fonte: The perlvar manpage)

3

Usa Devel::CheckOS. Gestisce tutti i casi logici e speciali per te. Io di solito fare qualcosa di simile:

use Devel::CheckOS qw(die_unsupported os_is); 

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

famiglie dei 'MicrosoftWindows' sa di cose come Cygwin, quindi se siete su Windows, ma non al prompt cmd, os_is() sarà ancora vi darà la risposta giusta.

-1

Questo è molto veloce e sporco, e non si scommettere è portatile al 100%, ma comunque utile in un pizzico. Verificare la presenza di barre rovesciate nella variabile PATH Env, poiché PATH è comune a Windows e Unix. So - in Perl:

+0

A meno che, naturalmente, tu non sia su cygwin. Quindi il tuo codice pensa erroneamente che stia girando unix. – tjd

Problemi correlati