У меня есть код (некоторые строки удалены):
package MaitreD::Command::bank_statement;
use Mojo::Base 'Mojolicious::Command';
sub run {
...
my $payments = read_file( $file ); # line 58
...
}
use XBase; # line 174
sub read_file {
...
}
1;
Я запускаю свое приложение. Затем выполните два http-запроса к этому приложению. Контроллер запускает эту команду как:
$c->app->commands->run( bank_statement => $upload );
Я получаю следующую ошибку (ожидается это):
Can't locate XBase.pm in @INC (you may need to install the XBase module) (@INC contains: /opt/monkeyman/lib /opt/monkeyman/local/lib/perl5/x86_64-linux /opt/monkeyman/local/lib/perl5 /opt/monkeyman/lib /opt/monkeyman/local/lib/perl5/5.24.1/x86_64-linux /opt/monkeyman/local/lib/perl5/5.24.1 /opt/monkeyman/local/lib/perl5/x86_64-linux /opt/monkeyman/local/lib/perl5 /opt/perlbrew/perls/perl-5.24.1/lib/site_perl/5.24.1/x86_64-linux /opt/perlbrew/perls/perl-5.24.1/lib/site_perl/5.24.1 /opt/perlbrew/perls/perl-5.24.1/lib/5.24.1/x86_64-linux /opt/perlbrew/perls/perl-5.24.1/lib/5.24.1 .) at /opt/monkeyman/lib/MaitreD/Command/bank_statement.pm line 174.
BEGIN failed--compilation aborted at /opt/monkeyman/lib/MaitreD/Command/bank_statement.pm line 174.
Compilation failed in require at (eval 2620) line 1.
Но когда я сделал второй запрос, я получил другую ошибку:
Undefined subroutine &MaitreD::Command::bank_statement::read_file called at /opt/monkeyman/lib/MaitreD/Command/bank_statement.pm line 58.
Как можно запустить MaitreD::Command::bank_statement::run
из контроллера, если компиляция модуля MaitreD::Command::bank_statement
не удалась?
Если все правильно, модуль MaitreD::Command::bank_statement
был частично скомпилирован в строку 174. Поэтому следующий http-запрос к приложению может вызвать MaitreD::Command::bank_statement::run
, и когда будет достигнута строка 58, я получу Undefined subroutine &M::C::b::read_file called
, потому что после строки 174 ничего не компилируется.
Как предотвратить частичную компиляцию? Я хочу, чтобы при возникновении ошибок ничего из MaitreD::Command::bank_statement
не было доступно