Masteries

技術的なことや仕事に関することを書いていきます.

小ネタ: Perlで関数の返り値の一部を無視する

例えば, func という関数があって, これが次のような実装になっていて, 3つの返り値を返すとします.

sub func {
    ...
    return ($x, $y, $z);
}

func を呼び出す際, 「返り値の1つ目と3つ目は利用するけれど, 2つ目は利用しない」という時は, undefを使って次のように書けます:

my ($x, undef, $z) = func();

ここでのundefは, Go言語におけるアンダースコア変数みたいなもの... と捉えると良さそうです.

x, _, z := func()

myundef組み合わせるの, 実は未定義動作だったりしないかな...?」と一瞬思ったのですが, perldocでも,

perldoc.jp

my ($x, $y, undef, $z) = foo(); # Ignore third value returned

...という形で紹介されているので, 普通に使える小技(?)と思って良さそうです.

不必要な変数は宣言しないに越したことはない(例えば2つ目の返り値を, 使わないのに$yとして定義すると, 後で$yはどこで使っているのだろう...? と混乱してしまう)ので, 使えるシーンがあれば積極的に使っていきたいところですね.