Вызов с обратными галочками вызовет новый процесс perl
, и для этого процесса будет установлена автоматическая очистка. Это означает, что любой вывод из script2.pl
выйдет, как только будет напечатан. Конечно делать
my $output = `perl script2.pl`;
будет означать, что вы на самом деле не читаете его, пока он выводится, а скорее вы просите, чтобы весь вывод заканчивался в $output
, когда он будет сделан.
$|
в perl
процессе, который запускается script2.pl
, не имеет никакого влияния на script.pl
. Если вы хотите, чтобы ваш script.pl
процесс имел небуферизованный вывод, отключите там буферизацию.
Альтернативой может быть не запускать script2.pl
как отдельный процесс, а реорганизовать его в модуль и правильно вызвать его, или использовать do
или require
для его вызова один раз. В любом случае изменение на $|
произойдет в том же интерпретаторе Perl и, следовательно, будет иметь эффект.
Конечно, не очень хорошая идея, если внутренняя часть вашего приложения портится с выходной буферизацией вашего приложения. Лучшим способом было бы реорганизовать этот модуль в модуль без изменения буферизации в этом модуле, и в вашей программе, где вы его используете, установите для буферизации значение, которое вам нужно, чтобы оно было для этой конкретной программы . Всегда позволяйте потребителю решать, чего он хочет, даже если это только вы сами.