- ベストアンサー
forkでプリント結果の違い
文末改行無しの動きがわかりません $pid = fork; if($pid){ Pid(1); wait; }else{ Pid(2); } sub Pid{ print"#$_[0]\n&"; #print"#$_[0]\n&\n"; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
自分の環境でprint "&";を実行した場合は、何も出力されないままPerlが終了しました。 Perlのprintはバッファリングを行っており、改行の時点でバッファリングされた文字列がまとめて出力されるようになっています。 https://mikeda.hatenablog.com/entry/20090427/1240846816 https://mikeda.hatenablog.com/entry/20090503/1241365884 print "#$_[0]\n&";を実行すると"#$_[0]\n"までの部分は"\n"によって出力されますが、その後の"&"はバッファリングされたままになります。その"&"が最終的に出力されるかどうかはタイミングなどに依存します(ひどい)。 バッファリングをやめてprint実行後すぐに出力されるように設定するには、予め$|=1;を実行します。上でリンクした2つ目の記事を参照。
補足
回答者様のサンプルは当たり前の値が返ってきました 質問文のwaitをコメントにすると期待する値が返ってきます