Включить другой скрипт в мой родительский скрипт Perl - PullRequest
0 голосов
/ 26 апреля 2018

Как я могу включить другой скрипт Perl в свой базовый скрипт Perl?

У меня есть первичный исходный файл test.pl, и я хочу включить в него вторичный исходный файл config.pl.

Что является стандартным методом для достижения этого в Perl?

1 Ответ

0 голосов
/ 26 апреля 2018

(Я предполагаю, что программа с именем config.pl устанавливает значения конфигурации, к которым вы хотите получить доступ в test.pl. Вы не проясняете это в своем вопросе.)

Простой пример.Если config.pl выглядит так:

#!/usr/bin/perl

$some_var = 'Some value';

Тогда вы можете написать test.pl, чтобы выглядеть так:

#!/usr/bin/perl

use feature 'say';

do './config.pl';

say $some_var;

Но это ужасная идея по многим причинам.Не в последнюю очередь потому, что он перестает работать, когда вы добавляете use strict и use warnings к любому из файлов (и вы должны стремиться иметь use strict и use warnings в всех вашего Perl-кода).

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

Модуль с именем MyConfig.pm:

package MyConfig;

use strict;
use warnings;

use parent 'Exporter';

our @EXPORT = qw[config];

sub config {
  my %config = (
    some_var => 'Some value',
  );

  return %config;
}

1;

И test.pl вот так:

#!/usr/bin/perl

use strict;
use warnings;

use feature 'say';
use FindBin '$Bin';
use lib $Bin;

use MyConfig;

my %config = config();

say $config{some_var};

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

Это немногобольше работы, чем ваш нынешний подход, но он гораздо более гибкий.И вы можете использовать strict и warnings.

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