例えば, func
という関数があって, これが次のような実装になっていて, 3つの返り値を返すとします.
sub func { ... return ($x, $y, $z); }
func
を呼び出す際, 「返り値の1つ目と3つ目は利用するけれど, 2つ目は利用しない」という時は, undef
を使って次のように書けます:
my ($x, undef, $z) = func();
ここでのundef
は, Go言語におけるアンダースコア変数みたいなもの... と捉えると良さそうです.
x, _, z := func()
「my
とundef
組み合わせるの, 実は未定義動作だったりしないかな...?」と一瞬思ったのですが, perldocでも,
my ($x, $y, undef, $z) = foo(); # Ignore third value returned
...という形で紹介されているので, 普通に使える小技(?)と思って良さそうです.
不必要な変数は宣言しないに越したことはない(例えば2つ目の返り値を, 使わないのに$y
として定義すると, 後で$y
はどこで使っているのだろう...? と混乱してしまう)ので, 使えるシーンがあれば積極的に使っていきたいところですね.