Как я могу определить операционную систему в Perl, а затем условно выполнить команды? - PullRequest
2 голосов
/ 03 марта 2011

Нашел этот вопрос на « Как я могу обнаружить операционную систему в Perl » - но что мне нужно, фрагмент кода Perl, который обнаруживает ОС, а затем использует это значение для условного выполнения кода для ОС-А или ОС-Б;в данном случае это Windows7 и CentOS-5.5.

Вопросы, отзывы, запросы - просто комментарии, спасибо !!

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Вы можете использовать таблицу отправки следующим образом:

my %callback = (
    MSWin32 => sub { win_code() },
    linux   => sub { linux_code() },
);

# run appropriate code
$callback{$^O}->();
4 голосов
/ 03 марта 2011

Посмотрите, как это делает File::Spec.

Здесь.


Ответ на комментарий:

Я не говорю, чтобы загрузить File :: Spec.Я говорю, посмотрите, как это делает его "подкласс".На самом деле это примерно так:

  • Объекты полиморфизируются.
  • Полиморфизм - это самый простой способ сделать то, что вам нужно.
  • Создайте общий шаблон реализации,
  • , затем реализуйте его для тех платформ, на которых вы будете его использовать.

File :: Spec пытается сделать их все, потому что это модуль CPAN.Но просто посмотрите, как это происходит, посмотрите, как складывает платформ в кейсы.Поскольку это основной и рекомендуемый модуль, вы, вероятно, не ошибетесь, следуя шаблону.

Если ваши платформы не соответствуют этому шаблону, то вам придется использоватьдополнительные методы, чтобы понюхать платформу.Различия в файловой системе могут быть не единственными, о которых вам нужно беспокоиться.

Я не совсем на 100% доволен тем, как FS реализует полиморфизм, если быть точным.Но это - это стратегия.И пример работы с платформами с полиморфизмом.

Просто для обсуждения: я предпочитаю дополнительный класс.Я бы основывал все реализации FS на абстрактном классе.Вдобавок к этому я бы разделил это поведение на реализации, а поверх этого я бы поместил один из моих любимых шаблонов класса Facade / Factory, который является публичным лицом класса.

2 голосов
/ 04 марта 2011

Конечно, $ ^ O является окончательным ответом на это.Но, возможно, вы захотите взглянуть на Devel :: CheckOS , который окружает его дружественной оболочкой.

...