Как Вы создаете модуль Perl?

Я лично использую комбинацию --stat и --oneline с командой show:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

Если вам не нравится / требуется статистика добавления / удаления, вы можете заменить --stat с --name-only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
17
задан brian d foy 15 February 2009 в 21:04
поделиться

6 ответов

Класс:

# lib/Class.pm
package Class;
use Moose;

# define the class

1;

модуль А, который экспортирует функции:

# lib/A/Module.pm
package A::Module;
use strict;
use warnings;
use Sub::Exporter -setup => {
    exports => [ qw/foo bar/ ],
};

sub foo { ... }
sub bar { ... }

1;

сценарий А, который использует их:

# bin/script.pl
#!/usr/bin/env perl

use strict;
use warnings;

use FindBin qw($Bin);
use lib "$Bin/../lib";

use Class;
use A::Module qw(foo bar);


print Class->new;
print foo(), bar();
27
ответ дан 30 November 2019 в 09:58
поделиться

В основном Вы создаете файл, названный Yourmodulename.pm, чье содержание:

package Yourmodulename;

# Here are your definitions

1; # Important, every module should return a true value

Затем программа, которая использует модуль, будет похожа:

#!/usr/bin/perl
use strict;            # These are good pragmas
use warnings;      

# Used modules
use Carp;              # A module that you'll probably find useful
use Yourmodulename;    # Your module

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

Your/Module.pm
Your/Other/Module.pm

И затем в Вашей программе:

use Your::Module;
use Your::Other::Module;

существует больше средств для экспорта функций и переменных от модуля, можно смотреть на Henning Koch "Пишущий серьезный Perl: абсолютный минимум необходимо знать" .

25
ответ дан 30 November 2019 в 09:58
поделиться

"Точный" эквивалент Вашего примера Python в Perl был бы похож на это:

# MyModule.pm
package MyModule;

sub helloworld { 
    my ( $name ) = @_;
    print "Hello, $name\n";
}

1;

# main.pl
use MyModule;
MyModule::helloworld( 'Jim' );

Для больше, см. запись для package в документации perlfunc . Для намного больше, посмотрите документация perlmod .

14
ответ дан 30 November 2019 в 09:58
поделиться

Последняя треть из Промежуточный Perl посвящена созданию модуля.

Каждый раз, когда Вы хотите знать, как сделать что-то в Perl, проверьте perltoc, оглавление для документации Perl:

% perldoc perltoc

Несколько частей базовой документации Perl могут помочь Вам:

Удача,

11
ответ дан 30 November 2019 в 09:58
поделиться

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

# main.pl

# Since this is a beginner question, I'll also point out that you should
# *always* use strict and warnings.  It will save you many headaches.
use strict;
use warnings;

MyModule::helloworld('Jim');
AnotherModule::helloworld('Jim');

package MyModule; # Still in main.pl!

sub helloworld { 
    my ( $name ) = @_;
    print "Hello, $name\n";
}

package AnotherModule; # Yep, still main.pl

sub helloworld {
    my $name = shift;
    print "Another hello to $name\n";
}

Это часто не используется, потому что это дает Вам пакет, это определяется в файле, имя которого не является тем же как пакетом, который может стать сбивающим с толку, потому что Вы имеете к use / require имя файла, но ссылаетесь на него в коде именем пакета.

Также примечание, которое эти 1; только необходимо как заключительная строка каждого файла, который включен через use / require. В этом случае мне не был нужен он, потому что это находится в main.pl. При помещении нескольких пакетов в тот же файл Вам только нужно 1; в конце файла, не после каждого пакета.

6
ответ дан 30 November 2019 в 09:58
поделиться

Самый традиционный способ настроить модуль следующие:

package Foo::Bar;
our @ISA       = qw(Exporter);       # Tells perl what to do with...
our @EXPORT    = qw(sub1 sub2 sub3); # automatically exported subs
our @EXPORT_OK = qw(sub4 sub5);      # exported only when demanded

# code for subs, constants, package variables here

1;  # Doesn't actually have to be 1, just a 'true' value.

и поскольку другие сказали, можно использовать его как так:

use Foo::Bar;
5
ответ дан 30 November 2019 в 09:58
поделиться
Другие вопросы по тегам:

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