例えば, 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はどこで使っているのだろう...? と混乱してしまう)ので, 使えるシーンがあれば積極的に使っていきたいところですね.