Несколько вещей:
Во-первых, используйте Local
в качестве префикса вашего модуля.Таким образом, если в вашей установке Perl просто окажется модуль с тем же именем, он будет использовать ваш.Назовите это «Local :: Module».Затем создайте каталог Local
и назовите свой модуль Module.pm
.
Еще одна вещь, которую вы должны понимать, это то, что вы определяете свой модуль в другом пространстве имен .По умолчанию все находится в пространстве имен main
, пока вы не используете оператор package
.Это создаст другое пространство имен , которое использует ваш пакет.Таким образом, если ваш пакет имеет функцию foo
, и вы определили функцию foo
в своей основной программе, они не будут сталкиваться.
Таким образом, вы имеетедва варианта: один (предпочтительный сейчас) - просто вызвать подпрограмму с добавлением полного имени пакета.Второй - экспортировать имена подпрограмм в основную программу.Это может вызвать проблемы с повторяющимися именами, но вам не нужно вводить имя пакета каждый раз, когда вы вызываете подпрограмму.
Без экспорта имени
Local / Module.pm
# /usr/bin/env perl
# Local/Module.pm
package Local::Module;
use strict;
use warnings;
sub Parse {
my $value = shift; #Might as well get it.
print "I got a value of $value\n";
return $value;
}
1; #Need this or the module won't load
program.pl
# /usr/bin/env perl
# program.pl
use strict;
use warnings;
use Local::Module;
Local::Module::Parse("Foo");
С экспортом:
Local / Module.pm
# /usr/bin/env perl
# Local/Module.pm
package Local::Module;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT_OK(Parse); #Allows you to export this name into your main program
sub Parse {
my $value = shift; #Might as well get it.
print "I got a value of $value\n";
return $value;
}
1; #Need this or the module won't load
program.pl
# /usr/bin/env perl
# program.pl
use strict;
use warnings;
use Local::Module qw(Parse);
Parse("Foo");