Запись 66: узнаём: поставляется ли пакет вместе с Перл или нет?
Бывает так, что вам приходится "работать" на чужом вычислителе, в котором нет выхода в Междусетье и ничего извне туда закачивать нельзя. Как быть?
Вспомним слова 26-го главы США Фёдора (Теодора) Рузвельта:
"
Делай, что можешь, с тем, что имеешь, там, где ты есть."
Одно из моих любимых высказываний, особенно в тех случаях, когда речь заходит про: "А вот было бы у нас столько денег?" или "Будь у меня такие же родители, я бы тоже ..." и т.д. и т.п.
В общем, когда работать надо, а возможностей немного, желательно ознакомиться со "всеми" ими, т.е. с "т
ем, что имеешь", "
там, где ты есть".
Как это сделать?
Предположим у нас стоит задача обрабатывать JSON записи (JSON — это словарь данных из мира JavaScript)., а так как колесо изобретать нам ни к чему, пока есть возможность раздобыть "готовые" решения для работы с JSON, мы, для начала, попробуем их поискать. Как это сделать в условиях отсутствия доступа к CPAN? Для этого нам потребуется выполнить несколько простых шагов:
1. Узнать номер установленного Перл, выполнив:
perl -v
.
2. Если он меньше 5.8.9, то прекратить выполнять нашу пошаговость (алгоритм) и готовиться к худшему, к написанию с нуля.
3. Если же он 5.8.9 и выше, то с помощью служебного приложения corelist мы можем выяснить, какие пакеты уже есть в самом Перл, касательно работы с JSON.
4. Для этого выполним следующий приказ:
corelist /JSON/
Здесь
/.../
это всё те же знакомые нам отыскивающие выражения с нужным словом JSON. В ответе, возможно, вам улыбнётся удача и вы увидите нечто подобное:
corelist /JSON/
Data for 2017-01-14
JSON::PP was first released with perl v5.13.9
Data for 2017-01-14
JSON::PP::Boolean was first released with perl v5.13.9
Это говорит о том, что в Перл, начиная с номера 5.13.9 поставляется пакет
JSON::PP
, который позволяет работать с JSON отображением данных, что называется из коробки. Ничего изобретать не надо.
Однако если ваш Перл ниже 5.13.9, то радости вам эти сведения не принесут и тогда придётся велосипедить (придумывать своё решение).
Дело в том, что сам corelist может содержать сведения о пакетах, которые, да, есть в самом Перл, но лишь начиная с номера выше, чем номер Перл установленного на (не)вашем рабочем вычислителе, просто потому что сам corelist может быть новее, чем то, что поставлялось с текущим Перл. Например, этого можно было им достичь обновив пакет
Module::CoreList
(собственно сам corelist) со CPAN (
# cpanm Module::CoreList
), а уж затем отключить вычислитель от "внешнего мира"и отдавать вам на "поработать".
Так что, вполне возможно, что ваш corelist умён не по годам.
Ну и напоследок, можно проверить, что пакет всё-таки и впрямь доступен (если номер Перл подошёл под описание выше), выполнив знакомый нам приказ:
perl -MJSON::PP -E 1
И если ошибок не было, то всё, теперь дело за "
тем, что можешь".