Perl чаще называется объявлением переменной - PullRequest
1 голос
/ 01 августа 2020

Мне нужно написать скрипт для проекта. Поскольку у нас есть структурированные папки (в среде Linux), которым нужно следовать, чтобы разместить сценарии для каждого модуля, который мы создаем.

Так, например, я работаю над проектом XYZ, а для этого проекта я Я должен писать свои скрипты (большинство Perl) внутри Module_XYZ. Путь ко всем (общим) модулям: /home/shared/Mining/.

Мой модуль проекта (Module_XYZ) находится внутри /home/shared/Mining/. Поэтому мне нужно писать сценарии в / home / shared / Mining / Module_XYZ /

Поскольку мне приходится чаще использовать этот путь (в сценарии) вместо того, чтобы снова и снова упоминать этот путь, я сохраняю его в сценарии в начале в переменной окружения.

our %ENV;
if ( !defined( $ENV{'MOD_PATH'} ) ) {
    $ENV{'MOD_PATH'} = "/home/shared/Mining/Module_XYZ/";
}

Хорошо ли добавить этот путь в ENV varaible и вызывать $ENV{'MOD_PATH'} всякий раз, когда это необходимо, или я должен go с объявлением его как константы, например :

use constant MOD_PATH => "/home/shared/Mining/Module_XYZ/";

или просто go с

$MOD_PATH = "/home/shared/Mining/Module_XYZ/";

Нужны предложения экспертов. TIA.

1 Ответ

2 голосов
/ 01 августа 2020

Намного лучше не упоминать что-либо вроде /home/shared/Mining где-нибудь в базе кода, а использовать относительные каталоги и запускать сценарий из папки проекта. Это сделает проект более портативным.

Если ваш скрипт (файл .pl) импортирует файлы .pm в Module_XYZ, тогда он должен настроить @INC с использованием use lib 'Module_XYZ', и скрипт должен быть запущен из каталога /home/shared/Mining или где бы то ни было Module_XYZ.

Если Module_XYZ содержит какие-то другие файлы, то опять же вы должны просто ссылаться на них относительно каталога текущего запущенного скрипта, например, (-f Module_XYZ/foo.txt).

Использование константы или просто my $MOD_PATH = "MODULE_XYZ" немного лучше, чем чтение $ENV{MOD_PATH}, потому что вы получите ошибки компиляции, если есть опечатка или если $MOD_PATH не входит в область видимости или не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...