Как я могу импортировать константы в несколько модулей в Perl?

Вам нужно будет создать свой собственный комбинированный список, чтобы достичь этого. Если уровней иерархии не много, вы можете разместить метку в виде элементов комбинированного списка и изменить свойства шрифта, такие как курсив или полужирный. Но это просто и не причудливо.

5
задан Jose Faeti 5 September 2011 в 07:47
поделиться

4 ответа

Можно поместить это наверху Constants.pm:

package main;

В этом случае все переменные, которые Вы определяете, будут в main пространство имен:

$main::x

или если Вы чувствуете себя храбрыми:

package;

В этом случае все переменные, которые Вы определяете, будут в пустом пространстве имен:

$::x

Отметьте то использование package без пространства имен препятствуется и будет, по-видимому, удерживаться от использования в некоторых версиях Perl. Посмотрите кавычку ниже.


Заключение в кавычки от man perlfunc:


       package NAMESPACE
       package Declares the compilation unit as being in the given
               namespace.  The scope of the package declaration is
               from the declaration itself through the end of the
               enclosing block, file, or eval (the same as the "my"
               operator).  All further unqualified dynamic identifiers
               will be in this namespace.  A package statement affects
               only dynamic variables--including those you've used
               "local" on--but not lexical variables, which are cre?
               ated with "my".  Typically it would be the first decla?
               ration in a file to be included by the "require" or
               "use" operator.  You can switch into a package in more
               than one place; it merely influences which symbol table
               is used by the compiler for the rest of that block.
               You can refer to variables and filehandles in other
               packages by prefixing the identifier with the package
               name and a double colon:  $Package::Variable.  If the
               package name is null, the "main" package as assumed.
               That is, $::sail is equivalent to $main::sail (as well
               as to $main'sail, still seen in older code).

               If NAMESPACE is omitted, then there is no current pack?
               age, and all identifiers must be fully qualified or
               lexicals.  However, you are strongly advised not to
               make use of this feature. Its use can cause unexpected
               behaviour, even crashing some versions of Perl. It is
               deprecated, and will be removed from a future release.


Править: Этот вопрос мог бы быть полезным также: Как я использую константы от модуля Perl?

2
ответ дан 18 December 2019 в 06:52
поделиться

Не говорите никому, что я сказал Вам, что это, но специальные переменные Perl доступно везде. Вы, вероятно, заметили, что это не работает:

{ package Foo;
our $global = 42; }

{ package Bar;
say "global is $global"; }

Поэтому $global на самом деле назван $Foo::global. Вы также, вероятно, заметили, что это "правило" не относится к вещам как @INC, %ENV, $_, и т.д. Поэтому те переменные, как всегда предполагается, находятся в main.

Но на самом деле, это - больше, чем просто те переменные. Весь шарик "вызывается" в main. Это означает, что можно записать что-то вроде этого:

{ package Constants;
  $_{PI} = 3.141592; }

{ package Foo;
  say "pi is $_{PI}"; }

и это будет работать.

(То же касается $ENV, &INC, и т.д.)

Если Вы когда-нибудь сделаете то это в реальном коде, однако, ожидает, что кто-то убьет Вас :) Хорошо знать, тем не менее, на всякий случай, что Вы видите, что кто-то еще делает его.

5
ответ дан 18 December 2019 в 06:52
поделиться

Средство экспорта выезда и perlmod страница справочника.

7
ответ дан 18 December 2019 в 06:52
поделиться

Можно использовать Средство экспорта как это:

В Constants.pm:

#Constants.pm
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($h0 $scale);
@EXPORT_OK = qw(myfunc);

$h0 = 0;
$scale = 20;
sub myfunc {...}

Примечания:
* & в &myfunc в @EXPORT массив является дополнительным, и он рекомендовал не использовать его. * Это экспортирует $h0 и $scale по умолчанию, и &myfunc, только если это требуют явно (см. ниже, как указать, какие символы импортируются клиентским модулем),

И затем в модуле, который импортирует Constants.pm и хочет использовать $h0, $scale или &myfunc Вы добавляете следующее для импорта всех символов, которые находятся в @EXPORT в Constants.pm.

#MyModule.pm
use Constants qw(;

Если Вы хотите импортировать только часть использования символов:

#MyModule.pm
use Constants qw($h0);

И наконец, если Вы не хотите импортировать какое-либо использование символов Constant.pm:

#MyModule.pm
use Constants ();
2
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: