Перечислите все переменные, загруженные функцией 'require' - PullRequest
1 голос
/ 11 марта 2020

У меня есть файл конфигурации с кучей структур данных (массивы, хэши), и я загружаю их в свой perl скрипт, используя

require '<config>';

Я могу использовать переменные из Конфиг, который я знаю, но есть ли способ, чтобы я мог перечислить все переменные, загруженные функцией require? В идеале я бы хотел, чтобы они загружались в переменную ha sh и ссылались на них, чтобы избежать конфликтов имен переменных

1 Ответ

3 голосов
/ 11 марта 2020

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

use strict;
use warnings;
my $file = '/path/to/foo.conf';
my $data = do $file;
die "Failed to parse $file: $@" if !defined $data and $@;
die "Failed to read $file: $!" if !defined $data;

Make Обязательно либо передайте абсолютный путь к файлу (рекомендуется, чтобы не зависеть от текущего рабочего каталога), либо добавьте относительный путь с помощью ./, в противном случае dorequire) будет искать @INC для файла, который с Perl 5.26 не содержит текущего рабочего каталога. См. Path :: This , чтобы узнать, как получить абсолютный путь относительно текущего файла.

...