Вы хотите экспортировать все переменные из модуля, и вы хотите сделать это таким образом, чтобы вы даже не знали, что экспортируете? Забудьте о use strict
и use warnings
, потому что, если вы поместите их в свою программу, они просто будут кричать и свернуться калачиком в углу, истерически плача.
Я никогда не имею в виду и никогда не экспортирую переменные. Я всегда создаю метод, чтобы вытащить необходимое значение. Он дает мне жизненно важный контроль над тем, что я подвергаю воздействию внешнего мира, и поддерживает чистоту пространства имен пользователя.
Давайте посмотрим на возможные проблемы с вашей идеей.
- Вы не представляете, что экспортируется в ваш модуль. Как программа, использующая этот модуль, узнает, что использовать? Где-то вы должны документировать, что переменные
$foo
и @bar
доступны для использования. Если вам нужно сделать это, почему бы просто не позаботиться об этом?
- У вас есть проблема, когда кто-то меняет модуль, и внезапно новая переменная экспортируется в программу с использованием этого модуля. Представьте, если эта переменная уже используется. В программе неожиданно обнаружена ошибка, и вы никогда не сможете ее исправить.
- Вы экспортируете переменную в свой модуль, и разработчик решает изменить эту переменную или даже удаляет ее из программы. Опять же, поскольку вы понятия не имеете, что импортируется или экспортируется, нет способа узнать, почему в программе внезапно появилась ошибка.
Как я уже говорил, у вас есть , чтобы знать где-нибудь, что используется в вашем модуле, который может использовать программа, так что вы все равно должны это документировать. Если вы собираетесь настаивать на импорте переменных, используйте хотя бы массив EXPORT_OK
и модуль Exporter. Это поможет ограничить ущерб. Таким образом, ваша программа может объявлять, от каких переменных она зависит, а ваш модуль может объявлять, какие переменные, как он знает, могут использовать программы. Если я изменяю модуль, я был бы очень осторожен с любой переменной, которую я вижу, я экспортирую. И, если вы должны указать в своей программе, какие переменные вы импортируете, вы должны быть осторожны с этими конкретными переменными.
В противном случае зачем использовать модули? Почему бы просто не вернуться к Perl 3.0 и использовать require
вместо use
и забыть об использовании оператора package
.