Какие модули распределяются с Perl?

Как уже говорили другие, вы добавляете v, который является строкой, к списку, который вы перебираете, как состоит из слов, заканчивающихся смесью строк и словарей, что не рекомендуется. Я думаю, что это была опечатка, которую можно исправить простым:

usernames = []
for users_dict in user_list:
    for k, v in users_dict.items(): # fails at this line
        if(k == 'username'):
            usernames.append(v)
usernames
>>> ['efermi', 'efermi2']

или лучше:

usernames = [x["username"] for x in user_list]
12
задан brian d foy 22 March 2009 в 02:06
поделиться

8 ответов

Для быстрого способа видеть модули и версии, которые Вы установили, используйте cpan инструмент для создания автопакета:

 cpan -a

ExtUtils:: Установленный может помочь Вам, если Вам нужно что-то более сложное.

Раньше была идея "стандартной библиотеки", но она действительно не существует в действительности. Модуль:: CoreList говорит Вам, что находится в "стандартной библиотеке", но многие поставщики устанавливают дополнительные модули, и некоторые даже удаляют или обновляют модули. Кроме того, дистрибутивы, такие как Земляничный Perl и ActivePerl идут со многими бонусными модулями.

Кроме того, Вы не должны базироваться для установки модулей. Вы только должны базироваться для установки модулей, где корень может установить модули. perlfaq8 дает Вам все подробности для установки модулей везде, где Вам нравится. Я рекомендую установить все модули за пределами распределенных @INC каталогов, таким образом, Вы содержите свой распределенный Perl в чистоте.

Удачи,

6
ответ дан 2 December 2019 в 04:43
поделиться

Если Вы устанавливаете Модуль:: CoreList, программа командной строки corelist может сказать Вам все о модулях и их версиях в различных версиях жемчуга. Страница, с которой Вы связались, дает обзор для последней версии жемчуга.

Действительно обратите внимание, что дистрибутивы часто обеспечивают намного больше по умолчанию, чем этот список, но этот список, как может предполагаться, присутствует везде (если это не явно зависимый от операционной системы модуль, такой как Win32).

15
ответ дан 2 December 2019 в 04:43
поделиться

кажется, что Вы хотите local::lib. Все преимущества cpan без корня (и листы системный нетронутый жемчуг).

1
ответ дан 2 December 2019 в 04:43
поделиться

Простая ссылка для этого находится в Приложении D из Книги, Начинающей Perl. Предоставленный это относится к Perl 5.6, но к моему знанию Perl 5.8 не удалил ни одного из эти и только представил новые (как Обзор:: MD5, File::Temp, Фильтр:: Простой, libnet, Список:: Util, Memoize, MIME:: Base64, Скаляр:: Util, Storable, Переключатель, Тест:: Больше, Тест:: Простой, текст:: Сбалансированный, Связь:: Файл, и т.д.)

Для каждой версии жемчуга можно посмотреть в perldoc., вот список для жемчуга 5.8.8

0
ответ дан 2 December 2019 в 04:43
поделиться

Модуль:: CoreList был уже упомянут. Это идет с интерфейсом командной строки для создания вещей легкими. Замечательно, если Вам уже установили его или имеете программу, которая должна выяснить то, что не может идти с конкретной версией Perl.

Если Вы хотите знать, какие модули идут с Вашей конкретной версией жемчуга, можно работать perldoc perlmodlib на командной строке для полного списка. Для более старых или более новых версий Perl можно просто перейти к странице Perl на CPAN и выбрать версию, которую Вы хотите (например, 5.6.2) от выпадающего, и затем перемещаетесь к perlmodlib страница в документации. (ввод perlmodlib в текст Вашего браузера поиск поможет).

При размышлении о не использовании модуля, потому что это не ядро на более старой версии Perl, то можно хотеть рассмотреть использование ПАРИТЕТА, Perl Archiver, связать дополнительные зависимости или даже сам Perl! Австралия Обучения Perl также имеет Подсказку по Perl относительно использования ПАРИТЕТА, который покрывает основы при начале работы с ПАРИТЕТОМ.

Всего самого лучшего,

Paul

8
ответ дан 2 December 2019 в 04:43
поделиться

Корректные прямые ответы были уже даны, но я думаю, что Вы задали неправильный вопрос. Вы, вероятно, пытаетесь разработать использование только базовые модули. Почему? Вы, вероятно, делаете это, потому что Вы не хотите иметь дело с зависимостями. Почему? Поскольку они могут быть болью в заднице. Но разработка Perl без CPAN пропускает половину питания. Вы наносите вред себе.Это того стоит.

Обновление: Теперь, когда я знаю больше о том, что Вы пытаетесь сделать, я могу ответить на правильный вопрос. Сначала, "как я устанавливаю модуль, когда у меня нет корня?" Простой ответ - это:

perl Makefile.PL PREFIX=/some/path LIB=/some/path/lib
...and all the rest as normal...

для основанных на MakeMaker модулей (LIB используется для управления в других отношениях неточной природой ПРЕФИКСА. INSTALL_BASE предпочтен, но это не назад совместимо).

и это для Модуля:: Сборка

perl Build.PL --install_base=/some/path

и затем модули закончатся в/some/path/lib, и можно установить PERL5LIB переменная среды или use lib qw(/some/path/lib) в Вашем коде.

Это означает, что можно засунуть зависимые модули прямо в распределение программного обеспечения и поставить их. Хорошо работает для модулей чистого Perl. Для материала, который требует компилятора, посмотрите по номиналу, поскольку другие предложили смочь поставить скомпилированные исполняемые файлы.

С другой стороны, можно распределить материал как модуль CPAN, вместе с зависимостями, разъясненными, и позволять клиенту CPAN разрешить их. Можно даже использовать Модуль:: AutoInstall для выполнения этого процесса за пределами клиента CPAN.

Таким образом, Вы видите, Вы не ограничиваетесь использованием просто базовых модулей при поставке приложения Perl.

9
ответ дан 2 December 2019 в 04:43
поделиться

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

Во-первых, выполните этот код каждой из целевых систем:

foreach my $dir (@INC) {
    print "Directory: $dir\n";
    if (-d "$dir") {
        my @modules = `find $dir/ -name "*.pm"`;
        foreach my $m (@modules) {
            my $label = $m;
            $label =~ s|\n$||;
            $label =~ s|//+|/|g;
            $label =~ s|^$dir/||;
            print "$label\n";
        }
    }
}

Обратите внимание, что Вам нужно *, отклоняют систему с командой находки. Выведите вывод в три файла, отсортированные. Затем используйте команды как это (из памяти):

grep -F -x -f list-1.txt list2.txt > list-12.txt
grep -F -x -f list-12.txt list3.txt > list-123.txt

Теперь list-123.txt должен иметь список общих модулей, более или менее.

Если это имеет значение все три системы совместно использовали несколько дополнительных модулей, особенно XML:: модули Синтаксического анализатора.

-1
ответ дан 2 December 2019 в 04:43
поделиться

посмотрите в Вас основная таблица символов, она покажет Вам все 'стандартные' доступные пакеты...

print %main::;
-6
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

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