Это не совсем ответ на ваш вопрос, но я думаю, что стоит упомянуть, чтобы другие не испытывали такой же боли, как я: не используйте любое значение только для чтения, если вы работаете на версия Perl более ранняя, чем 5.10.1. Рассмотрим этот маленький пример:
{
package Foo;
sub foo { print "I'm in foo!\n"; }
}
use strict;
use warnings;
use Readonly;
Readonly my @classes => qw(Foo);
foreach my $class (@classes)
{
# this dies with "Can't call method "foo" without a package or object reference"
$class->foo;
}
Поскольку мой XS-фу не очень высокий, я не могу объяснить, что здесь происходит очень связно (но Devel :: Peek показывает некоторые интересные вещи в переменной $class
).