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

Я очень новичок в программировании на Perl. Я только что закончил читать книгу Ламы. До сих пор я писал сценарии на Bash, но я хочу попробовать Perl и его преимущества по сравнению со сценариями на Bash.

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

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

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

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


person forquare    schedule 12.07.2010    source источник


Ответы (3)


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

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

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

person hobbs    schedule 13.07.2010

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

person ghostdog74    schedule 13.07.2010

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

  • Вы должны проверить наличие модуля правильной версии, чтобы ваш код Perl не выдавал сообщение об ошибке, например: «Не удается найти Data/UUID.pm в @INC (@INC содержит: ...)». Например:

    eval { use Data::UUID; };
    if( $@ ) { 
            print "Data::UUID not found\n"; 
    }
    

    or

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

    cpan Data::UUID
    

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

    #!/usr/bin/perl
    use CPAN;
    CPAN::install("Data::UUID");
    
person 2can    schedule 13.07.2010
comment
Downvote: это не работает, потому что use запускается во время компиляции. Кроме того, у нас уже есть отличная цепочка инструментов для отслеживания зависимостей + установки, как описано в ответе Хоббса, в этом хакерстве нет необходимости. - person daxim; 16.08.2010