コマンドが一つだったら(パイプがなかったら)、wait_all_pidをするとt_command_lstのpidが初期化されていないので、uninitialised value(s)になる。 コマンドが一つの時は、execute_external_command)(子プロセスを作る)でpidを取り、その関数内でwait(pid, end_status, 0)してるので待てていると思う。