Как я могу обнаружить операционную систему в Perl?

Проблема заключается в файле https.conf!

# Virtual hosts
# Include conf/extra/httpd-vhosts.conf

Ошибка возникает, когда hash (#) удаляется или запутывается. Эти две строки должны отображаться, как показано выше.

55
задан mxcl 4 December 2008 в 01:23
поделиться

6 ответов

Исследуйте $^O переменная, которая будет содержать название операционной системы:

print "$^O\n";

, Который печатает linux на Linux и MSWin32 в Windows.

можно также обратиться к этой переменной именем $OSNAME , если Вы используете английский язык модуль:

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

Согласно [1 115] perlport, $^O будет darwin на Mac OS X.

<час>

можно также использовать Конфигурация базовый модуль, который может предоставить ту же информацию (и намного больше):

use Config;

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

, Который на моей печати машины Ubuntu:

linux
i486-linux-gnu-thread-multi

Примечание, что эта информация основана на системе, что Perl был , создало , который является не обязательно, системный Perl в настоящее время работает (то же верно для [1 118] $^O и $OSNAME ); ОС не будет, вероятно, отличаться, но некоторая информация, как имя архитектуры, может быть.

78
ответ дан Brad Gilbert 7 November 2019 в 17:18
поделиться

При необходимости в более определенной информации о Windows, это может помочь.

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/;
}}

Полученный от sysinfo.t, который я записал исходной версии.

, Если Вам нужна более подробная информация:

my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
12
ответ дан Brad Gilbert 7 November 2019 в 17:18
поделиться

Sys:: Информация:: ОС похожа на относительно чистое потенциальное решение, но в настоящее время, кажется, не поддерживает Mac. Это не должно быть слишком много работы для добавления этого все же.

7
ответ дан Brad Gilbert 7 November 2019 в 17:18
поделиться

Посмотрите в источнике для File::Spec , чтобы видеть, как он загружает правильного делегата на основе операционной системы.:)

File::Spec имеет отдельный файл модуля Perl для каждой ОС. File::Spec::Win32, File::Spec::OS2, и т.д.

Это проверяет операционную систему и загрузит соответствующее .pm файл во времени выполнения на основе ОС.

# From the source code of File::Spec
my %module = (
      MSWin32 => 'Win32',
      os2     => 'OS2',
      VMS     => 'VMS',
      NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
      symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
      dos     => 'OS2',   # Yes, File::Spec::OS2 works on DJGPP.
      cygwin  => 'Cygwin',
      amigaos => 'AmigaOS');


my $module = $module{$^O} || 'Unix';

require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");
6
ответ дан tjwrona1992 7 November 2019 в 17:18
поделиться

Переменный $ ^O (это - капитал 'O', не нуль) содержит название операционной системы.

В зависимости от того, что Вы хотите, это может или не может дать ответ, который Вы хотите - в моей системе, которую это дает 'Linux', не говоря который дистрибутив. Я не так уверен в том, что это говорит относительно Windows или MacOS.

3
ответ дан Geoglyph 7 November 2019 в 17:18
поделиться

Вот справочник о том, как найти ОС, которую локальная машина выполняет от Perl.

$ ^O переменная ($OSTYPE при использовании английского языка) содержит операционную систему, для которой был создан двоичный файл жемчуга.

2
ответ дан willasaywhat 7 November 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: