2009-09-14 24 views

Respuesta

15

De perldoc perlvar:

  • $OSNAME
  • $^O

El nombre del sistema operativo whic h Esta copia de Perl se creó, como se determinó durante el proceso de configuración. El valor es idéntico a $Config{'osname'}. Ver también Config y el modificador de línea de comandos -V documentado en perlrun.

En las plataformas Windows, $^O no es muy útil: dado que siempre es MSWin32, no indica la diferencia entre 95/98/ME/NT/2000/XP/CE/.NET. Use Win32::GetOSName() o Win32::GetOSVersion() (vea Win32 y perlport) para distinguir entre las variantes.

+0

¡Excelente! ¡Gracias! – knorv

+1

¿Qué hay de Cygwin? $^O = 'cygwin' – mob

+0

@mobrule - Si estamos usando Cygwin, ¿importa? No tengo un cuadro de Windows para probarlo, pero si estás usando Cygwin, básicamente obtienes lo mejor de ambas palabras (en su mayor parte), así que realmente no debería importar. Si quieres saber cómo afecta Cygwin a '$^O' debes ejecutar Perl bajo Cygwin y descubrirlo. –

6
$^O eq 'MSWin32' 

(Fuente: La página de manual perlvar)

3

Uso Devel::CheckOS. Maneja todos los casos lógicos y especiales para usted. Yo suelo hacer algo como:

use Devel::CheckOS qw(die_unsupported os_is); 

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

Las familias de los '' MicrosoftWindows sabe acerca de las cosas tales como Cygwin, así que si usted está en Windows, pero no en la línea de cmd, os_is() todavía le dará la respuesta correcta.

-1

Esto es muy rápido y sucio, y no apostaría que es 100% portátil, pero sigue siendo útil en un apuro. Compruebe la presencia de barras diagonales inversas en la variable PATH Env, ya que PATH es común tanto para Windows como para Unix. Entonces - en Perl:

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

A menos que, por supuesto, estés en cygwin. Entonces su código erróneamente piensa que se está ejecutando Unix. – tjd

Cuestiones relacionadas