Net::Telnetライブラリを使用したとき、cmdサブルーチンがscalarとlistを返却する記載になっており、返却されるデータも全く別物なのが気になったので調べてみた。
Net::Telnet->cmdメソッドのリファレンスはこんな内容。
cmd - issue command and retrieve output $ok = $obj->cmd($string); $ok = $obj->cmd(String => $string, [Output => $ref,] [Cmd_remove_mode => $mode,] [Errmode => $mode,] [Input_record_separator => $chars,] [Ors => $chars,] [Output_record_separator => $chars,] [Prompt => $match,] [Rs => $chars,] [Timeout => $secs,]); @output = $obj->cmd($string); @output = $obj->cmd(String => $string, [Output => $ref,] [Cmd_remove_mode => $mode,] [Errmode => $mode,] [Input_record_separator => $chars,] [Ors => $chars,] [Output_record_separator => $chars,] [Prompt => $match,] [Rs => $chars,] [Timeout => $secs,]);
どうやって実現してるのか調べてみたら、cmdサブルーチンの処理の最後はこんな処理だった
wantarray ? @$output : 1;
このページによると、wantarrayとは、
実行中のサブルーチンの戻り値として、リストが要求されている場合に真を返し、スカラーが要求されている場合には偽を返します。
というものだそうな。
覚えておこう。