Дайте teachers_file
и students_file
builder
методы (или встроенные подпрограммы default
), которые устанавливают их из файла конфигурации.Конструктор будет запускаться только в том случае, если эти атрибуты не предоставлены в качестве ключей для конструктора (если только вы не используете init_arg => undef
для предотвращения их установки в конструкторе).
Если ваша конфигурацияэто собственный атрибут со сборщиком, который читает файл конфигурации, тогда у вас возникла проблема с порядком следования между config
и teachers_file
и students_file
.Вы можете решить эту проблему, сделав атрибуты teachers_file
и students_file
lazy, что гарантирует, что они не будут пытаться создаваться до атрибута config.Однако вы можете убедиться, что ошибка «foo is not readable file» выдается как можно раньше во время построения, а не при первом использовании атрибута.Вы можете обойти это, добавив
sub BUILD {
my $self = shift;
$self->teachers_file;
$self->students_file;
}
, который гарантирует, что эти атрибуты будут прочитаны один раз (и созданы), прежде чем конструктор вернется.