dポイントプレゼントキャンペーン実施中!

MAIN: {
  my @array = (1 .. 5);
  print three(\@array);
  exit;
}

sub three {
  my $array = shift;
  return $$array[2];
}

のように、サブルーチンに配列リファレンスを渡したあと、$$array[2]のようにデリファレンスするのが面倒なのですが、
このとき$array[2]と書ける何か良い方法はないでしょうか?
# 大きな配列を取り扱うので、リファレンスを使いたいんです。。
型グロブを使うことも考えたのですが、サブルーチン内でmyで宣言出来なくて、スコープ的にまずくなりそうなので断念しました;

どなたかアドバイスしていただけると嬉しいです。。

A 回答 (3件)

素直に $$array[2] とするのがベストだと思う.


理論上は「配列リファレンスを配列として扱う」ためのモジュールを作って tie すれば可能だと思うけど....
    • good
    • 0
この回答へのお礼

ありがとうございます。
取りあえずは、素直にデリファレンスしようと思います~。
tieについては勉強してきます;

お礼日時:2007/02/08 17:24

ちょっと別の切り口で。


アロー演算子を使うほうが見た目にもスッキルすると思います。

return $array->[2];

ちなみにハッシュでもアロー演算子が使えます。

$foo = \%bar;
return $foo->{'hoge'};
    • good
    • 0
この回答へのお礼

ありがとうございます。
アロー演算子使わせていただきます_ _

お礼日時:2007/02/08 17:26

サブルーチンの最初でデリファレンスして新しい配列を定義すればどうでしょう。

自分はよく使いますが。

sub three {
  my $array = shift;
  my @data = @{$array};
  return $data[2];
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
大きな配列を使うので出来るだけコピーはしたくなくて;

お礼日時:2007/02/08 17:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!