Я изучаю Перл. В качестве упражнения я пытаюсь распечатать все установленные модули Mojolicious. Я использую Strawberry Perl и не устанавливаю grep
.
Моя наивная попытка:
perl -wE "for (sort `cpan -l`) { chomp; say if index($_, 'Mojo') == 0; };"
Я узнал, что cpan -l
возвращает список. Я ожидал строки, но ничего. Я sort
возвращаю список, chomp
каждую запись и say
те, которые начинаются с "Mojo".
Это скорее работает, но печатает каждую строку дважды:
Mojolicious::Sessions undef
Mojolicious::Sessions undef
Mojolicious::Static undef
Mojolicious::Static undef
Mojolicious::Types undef
Mojolicious::Types undef
Mojolicious::Validator undef
Mojolicious::Validator undef
Mojolicious::Validator::Validation undef
Mojolicious::Validator::Validation undef
Что плохого в том, что каждую запись печатает дважды?
Изменить:
Я запускаю код под Cent OS. Похоже, он работает нормально, но установлены две версии библиотек.
perl -we 'for (sort `cpan -l`) { chomp; print $_, "\n" if index($_, "JSON") == 0; };'
JSON::PP 4.02
JSON::PP 4.04
JSON::PP::Boolean 4.02
JSON::PP::Boolean 4.04
Редактировать 2:
По рекомендации @zdim я проверил пути к файлам установленных модулей. Оказалось, что есть двойные установки:
whichpm -a Mojolicious
C:\Strawberry\perl\site\lib\Mojolicious.pm
C:\Strawberry\perl\vendor\lib\Mojolicious.pm
whichpm -v Mojolicious
whichpm: WARNING: DUPLICATE module files found for 'Mojolicious':
C:\Strawberry\perl\vendor\lib\Mojolicious.pm
Mojolicious 8.22 (non-core) C:\Strawberry\perl\site\lib\Mojolicious.pm
Похоже вопрос был неверным.
Возможной причиной дублирования установки может быть неправильное обновление модулей. После установки Strawbery я использовал следующую команду:
cpan-outdated -p | cpanm
Спасибо, ребята, за помощь. Похоже, это был неправильный вопрос. Я принимаю данный ответ и открою новый «лучший» вопрос.
grep
:perl -e "print sort grep/^Mojo/,qx(cpan -l)"
- person mob   schedule 06.08.2019grep
в консоли. - person Miroslav Popov   schedule 06.08.2019cpan -l
по какой-то причине показать строку выворота какundef
. - person Miroslav Popov   schedule 06.08.2019