У меня есть хэш, который присутствует в главном скрипте perl (.pl). Я хочу, чтобы хэш был вискось для модулей (.pm), которые вызывается в главном скрипте perl. Как я могу объявить его глобально? Является ли это возможным?Глобально объявить хэш в perl
ответ
Прежде всего - это плохая идея. Глобалы или супер-глобалы, такие как вы ищете, приводят кодекс со сложными зависимостями повсюду - то, что вы делаете , пытаясь избежать, используя модули в первую очередь.
Однако - вы можете объявить переменную с our
, а затем получить к ней доступ через имя пакета.
our %thing = (key => "value");
print Dumper \%main::thing;
Это видно в другом месте пространства имен с полным именем и модулем.
(Если вы действительно должны, вы можете начать трахаться с TYPEGLOBs, но поверьте мне, когда я говорю, что это плохая идея).
Это нарушает множество правил хорошего программного обеспечения, но возможно использование переменных пакета.
В hash.pl:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use MyHashModule;
our %hash = (one => 1, two => 2, three => 3);
say hashkeys();
В MyHashModule.pm
package MyHashModule;
use strict;
use warnings;
use base 'Exporter';
our @EXPORT = qw[hashkeys];
sub hashkeys {
return keys %main::hash;
}
1;
Но я не могу повторить то, что достаточно страшная мысль это. Если бы вы объяснили больше о том, что вы на самом деле пытаетесь сделать, мы, возможно, придумаем решение, которое намного более безопасно.
Настоятельно рекомендуется рассматривать локальные переменные, в отличие от глобальных переменных, по возможности. Если вам нужно только написать небольшой скрипт, могут возникнуть проблемы с объявлением глобальной переменной, но по мере увеличения сценария или если вы или другой разработчик добавили больше функциональности, может быть трудно найти логические ошибки, которые ползут . в
Это, как говорится, если вы должны объявить глобальную переменную, вы бы просто изменить my
к our
, например:
our %global_variable = (key => "value");
- 1. как объявить массив глобально
- 2. Объявить объект типа «глобально»
- 3. Как объявить ViewController глобально
- 4. Глобально объявить UIColor в проекте
- 5. Хэш-константы в Perl
- 6. объявить NSMutablearray из uiimages глобально
- 7. Laravel 4 - Объявить класс глобально?
- 8. Как объявить SKSpriteNode глобально в Swift
- 9. Как объявить uisearchController глобально в Swift
- 10. Как объявить метод глобально в классе
- 11. Как объявить тип глобально в проекте (машинопись)
- 12. Объявить HttpSession глобально в классе Controller?
- 13. Изменение хэш в хэш в Perl
- 14. Perl: разыменования хэш хэш хэшей
- 15. Инициализируют хэш в Perl
- 16. сортировка хэш в Perl
- 17. Хэш хэшей в Perl
- 18. Как перебирать хэш (хэш) в Perl?
- 19. Как включить хэш внутри хэш в perl?
- 20. Perl добавить хэш хэш хэшей в конце
- 21. Perl хэш нечетное число элементов в хэш
- 22. как приращение хэш хэш в Perl
- 23. Объявить объект класса глобально, но без параметров
- 24. не удалось объявить строку глобально из json
- 25. Как объявить ресурс глобально на Android
- 26. perl + как объявить массив
- 27. Как глобально переопределить метод в Perl
- 28. Perl использования хэш
- 29. Perl хэш выпуска массивов
- 30. поиске PERL хэш значения
Это [XY Проблема] (HTTP: // мета. stackexchange.com/questions/66377/what-is-the-xy-problem). Что вы пытаетесь достичь? Но это уже глобально видно, если вы объявляете его через 'our' - вам может потребоваться указать пространство имен для доступа к нему (и это плохая идея). – Sobrique
Возможно, лучше передать ссылку на этот хэш на функции в ваших модулях. Или, если модули являются классами, добавьте ссылку на этот хэш к созданным объектам. – jcaron