У меня нет экземпляра mod_perl, с которым удобно тестировать, поэтому я не могу проверить эти предложения. Я надеюсь, что они удаются.
Попробуйте использовать Scalar::Util::readonly
, чтобы проверить, помечена ли уже переменная только для чтения.
#!perl
package Example::Constants;
use Exporter qw( import );
use Readonly;
use Scalar::Util qw(readonly);
our $EMPTY_STRING;
our @EXPORT = qw( $EMPTY_STRING );
if ( !readonly( $EMPTY_STRING ) ) {
Readonly $EMPTY_STRING => q{};
}
Вы также можете попробовать use vars
:
#!perl
package Example::Constants;
use Exporter qw( import );
use Readonly;
use vars qw( $EMPTY_STRING );
Readonly $EMPTY_STRING => q{};
our @EXPORT = qw( $EMPTY_STRING );
Вы также можете использовать константу typeglob:
#!perl
package Example::Constants;
use Exporter qw( import );
use Readonly;
our $EMPTY_STRING;
*EMPTY_STRING = \q{};
our @EXPORT = qw( $EMPTY_STRING );
Использование константы typeglob кажется идеальным, поскольку большое ограничение метода (для него требуется глобальный пакет) здесь не является проблемой.