Создание исключения через croak
в разветвленном дочернем процессе, похоже, печатает ошибку как фоновый процесс. То есть, это заглушает приглашение оболочки.
Если I die
вместо croak
, сообщение об ошибке появляется как процесс переднего плана. Я пытаюсь выяснить, почему это в документации Carp
без всякой удачи.
Вот что я имею в виду. croak
версия:
$ perl Wrapper.pm
$ error: ... does not exist at Wrapper.pm line 624
Версия die
:
$ perl Wrapper.pm
error: ... does not exist at Wrapper.pm line 515.
Я пытался перехватить fork
и напечатать $@
в STDERR и выйти, но это не дало эффекта. Есть идеи? Я хотел бы иметь возможность использовать croak
в этом конкретном случае.
Хотя мой код немного более запутанный, вот как вы можете воспроизвести это поведение:
$ perl -MCarp -e 'unless (fork) {croak "child"}'
$ child at -e line 1
<- cursor blinking here. Pressing enter gives me a new prompt:
$
$ perl -e 'unless (fork) {die "child"}'
child at -e line 1.
$
Решено: cjm Получено :
$ perl -e '$SIG{__DIE__} = sub {sleep 1}; unless (fork) {die "child"}'
$ child at -e line 1.
Спасибо за помощь!