Программирование Perl и распределение

Я очень плохо знаком с программированием Perl. Я только что закончил читать книгу Ламы. Вплоть до сих пор я написал сценарий в Bash, но я желаю испытать Perl, и это - преимущества по сценариям Bash.

Я создаю сценарий, который использует много стандартных модулей (например, Getopt) и некоторые not-so-standard модули (например, PerlMagick)

В какой-то момент я хочу распределить свой код Perl, и я хочу, чтобы он был применим людьми, которые действительно не знают о Perl или программировании. Очевидно, стандартные модули должны всегда быть там (я использую "использование 5.010" для гарантии этого до некоторой степени), но что из нестандартных?

Я предполагаю, что существует две возможности: 1) Я должен сказать конечному пользователю устанавливать недостающие модули? 2) Я должен создать сценарий установки, который тестирует на модули и если они не там, затем устанавливают их? Если выбор 2 выбран, я должен загрузить модули и установить их? Или распределите их с моим основным кодом? Я просто не уверен, что этикет с такими вещами...

Большое спасибо за весь совет, Ben

5
задан forquare 12 July 2010 в 23:43
поделиться

3 ответа

Если вы разрабатываете свое приложение как дистрибутив Perl (как это используется в CPAN), то вы получаете мощь инструментария Perl, который будет решать подобные вопросы за вас. Вы просто убедитесь, что модули, от которых вы зависите, правильно перечислены в вашем Makefile.PL, и тогда кому-то достаточно написать cpan YourApp::Name, чтобы получить ваше приложение и все, что оно требует. Или если они скачали ваше приложение не из CPAN и собирают его вручную, процесс make может найти зависимости для них (вот почему Module::AutoInstall не совсем мертв и не заслуживает быть IMO).

Для пользователей Windows единственное, что вам нужно добавить перед шагом cpan YourApp::Name, это "install Strawberry Perl".

У вас также есть возможность комплектации (будь то PAR или просто установщик или архив, включающий ваше приложение и все необходимые модули, и, возможно, сам perl), но у этой техники есть один существенный недостаток: она означает, что вы либо не можете использовать любой XS-код, либо вам придется предоставлять отдельный пакет для каждой платформы, которую вы хотите, чтобы поддерживало ваше приложение. Маршрут CPAN не сталкивается с этой проблемой.

5
ответ дан 14 December 2019 в 01:01
поделиться

А если вы не хотите компилировать их с помощью prelcc или perlapp - тогда работает любая возможность.

  • Вы должны проверить, что модуль правильной присутствующей версии, чтобы ваш Perl код не будет выдавать сообщения об ошибках типа: "Can't locate Data/UUID.pm in @INC (@INC содержит: ... )". Например:

    eval { use Data::UUID; };
    if( $@ ) { 
     print "Data::UUID не найден\n"; 
    }
    

    или

    eval { use Text::ParseWords 3.23; } 
    if( $@ ) { 
     print "Text::ParseWords 3.23 not found\n"; 
    }
    
  • Вы можете попробовать использовать модуль CPAN (или cpan на unix). Например, вы можете попробовать команду shell:

    cpan Data::UUID
    

    или из perl-скрипта:

    #!/usr/bin/perl
    используйте CPAN;
    CPAN::install("Data::UUID");
    
1
ответ дан 14 December 2019 в 01:01
поделиться

вы можете преобразовать их в исполняемые файлы. Вы можете попробовать такие вещи, как perlcc, perl2exe, PAR, или Perl development kit.

3
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

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