62 votes

Comment puis-je détecter le système d'exploitation en Perl ?

J'ai Perl sur Mac, Windows et Ubuntu. Comment puis-je savoir à l'intérieur du script lequel est lequel ? Merci d'avance.

Edit : On m'a demandé ce que je faisais. Il s'agit d'un script, qui fait partie de notre système de construction multiplateforme. Le script parcourt les répertoires et détermine les fichiers à construire. Certains fichiers sont spécifiques à une plate-forme, et donc, sous Linux, je ne veux pas construire les fichiers se terminant par _win.cpp, etc.

1 votes

Pourquoi avez-vous besoin de savoir ? (Il peut y avoir une réponse plus appropriée à votre question, en fonction de ce que vous faites (le cas échéant) qui dépend de la plate-forme).

89voto

Robert Gamble Points 41984

Examinez le $^O qui contiendra le nom du système d'exploitation :

print "$^O\n";

Quelles impressions linux sur Linux et MSWin32 sur Windows.

Vous pouvez également vous référer à cette variable par le nom $OSNAME si vous utilisez le Anglais module :

use English qw' -no_match_vars ';
print "$OSNAME\n";

Según perlport , $^O sera darwin sur Mac OS X.


Vous pouvez également utiliser le Config module de base, qui peut fournir les mêmes informations (et beaucoup plus) :

use Config;

print "$Config{osname}\n";
print "$Config{archname}\n";

Qui sur ma machine Ubuntu imprime :

linux
i486-linux-gnu-thread-multi

Notez que cette information est basée sur le système que Perl a été construit qui n'est pas nécessairement le système sur lequel Perl s'exécute actuellement (il en va de même pour l'option $^O y $OSNAME ) ; le système d'exploitation ne sera probablement pas différent mais certaines informations, comme le nom de l'architecture, peuvent très bien l'être.

2 votes

Merci :) Et pour les autres personnes qui pourraient utiliser cette réponse, cygwin perl renvoie "cygwin", il y a donc deux possibilités pour Windows.

3 votes

Plus de deux ; il y avait un portage dos, et le portage os2 permettait de fonctionner sous Windows. Toutes les valeurs possibles de $^O sont en théorie documentées dans < perldoc.perl.org/perlport.html >.

0 votes

Imprimer "$^O \n " ; imprime effectivement "darwin" sur mon système Mac OS X.

14voto

Brad Gilbert Points 12724

Si vous avez besoin d'informations plus spécifiques sur Windows, ceci peut vous aider.

my $osname = $^O;

if( $osname eq 'MSWin32' ){{
  eval { require Win32; } or last;
  $osname = Win32::GetOSName();

  # work around for historical reasons
  $osname = 'WinXP' if $osname =~ /^WinXP/;
}}

Dérivé de sysinfo.t dont j'ai écrit la version originale.

Si vous avez besoin d'informations plus détaillées :

my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();

1 votes

Win32 utilise une fonction dépréciée GetVersionExA. Cela ne fonctionne pas pour les versions > 6.2.

0 votes

@MayraDelgado En effet, et il semble qu'il n'y ait pas de remplacement direct. C'est pourquoi quelqu'un qui en a besoin devrait trouver comment le corriger et faire une demande de téléchargement. J'utilise rarement Windows de toute façon, donc il est peu probable que ce soit moi.

8voto

Leon Timmermans Points 23230

Sys::Info::OS semble être une solution potentielle relativement propre, mais ne semble pas actuellement supporter le Mac. Il ne devrait pas y avoir trop de travail pour l'ajouter.

0 votes

Cela aurait été une meilleure réponse, si seulement il supportait Mac. Je préfère les fonctions assistées par le compilateur aux chaînes de caractères qui posent des problèmes de maintenance.

4voto

Geoglyph Points 340

La variable $^O (c'est un 'O' majuscule, pas un zéro) contient le nom du système d'exploitation.

En fonction de ce que vous voulez, il peut ou non donner la réponse que vous souhaitez - sur mon système, il donne 'linux' sans dire quelle distro. Je ne suis pas sûr de ce qu'il dit sur Windows ou MacOS.

4voto

Abyss Knight Points 2095

Voici une référence rapide sur la façon de trouver le système d'exploitation de la machine locale à partir de Perl.

La variable $^O ($OSTYPE si vous utilisez l'anglais) contient le système d'exploitation pour lequel votre binaire perl a été construit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X