Итак ... предложение о распространении общего кода на другой модуль хороший. Но вы не должны называть модули * .pl, и вы не должны загружать их по require
-удинному пути (как в require "../lib/foo.pl";
). (Во-первых, говоря «..», ваш сценарий будет зависеть от того, что он выполняется из одного и того же рабочего каталога каждый раз. Таким образом, ваш скрипт может работать, когда вы запускаете его как perl foo.pl
, но он не будет работать при запуске как perl YourApp/foo.pl
. Это вообще не хорошо.)
Предположим, ваше приложение называется YourApp. Вы должны создать приложение в виде набора модулей, которые находятся в каталоге lib/
. Например, для примера - модуль «Foo»; его имя файла: lib/YourApp/Foo.pm
.
package YourApp::Foo;
use strict;
sub do_something {
# code goes here
}
Теперь предположим, что у вас есть модуль под названием «Бар», который зависит от «Foo». Вы просто сделать lib/YourApp/Bar.pm
и сказать:
package YourApp::Bar;
use strict;
use YourApp::Foo;
sub do_something_else {
return YourApp::Foo::do_something() + 1;
}
(В качестве продвинутого упражнения, вы можете использовать Sub::Exporter
или Exporter
для сделать use YourApp::Foo
установить подпрограммы в имен Потребляющего пакета, так что вам не придется писать YourApp::Foo::
до все.)
В любом случае, вы создаете все свое приложение, как это. Логические элементы функционально должны быть сгруппированы в модули (или даже лучше, классы ).
Для того, чтобы все это запустить, то написать небольшой скрипт, который выглядит следующим образом (я поместить их в bin/
, поэтому давайте назовем его bin/yourapp.pl
):
#!/usr/bin/env perl
use strict;
use warnings;
use feature ':5.10';
use FindBin qw($Bin);
use lib "$Bin/../lib";
use YourApp;
YourApp::run(@ARGV);
Ключевым моментом здесь является то, что ни один из кода находится за пределами модулей, за исключением крошечный бит шаблона, чтобы запустить приложение. Это легко поддерживать , и, что более важно, упрощает автоматическую запись тестов . Вместо того, чтобы запускать что-то из командной строки, вы можете просто вызвать функцию с некоторыми значениями.
В любом случае, это, вероятно, не по теме. Но я думаю, что важно знать .
@chaos Вот что я боялся: P Изначально я написал модуль А, как мне сказали, что это будет отдельный сценарий, затем он мутирует в стиле LAMP в веб-странице. благодаря – melaos