- ベストアンサー
Perlにはポインタという概念はありますか
C/C++等にあるポインタの概念は、Perlにはあるのでしょうか? 当方まだ間もないためか聞いたことがありません。 2次元配列があればあるとは思いますがそれも?です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
perlにはC/C++のポインタそのものはありませんが、似たようなものでリファレンス(参照)があります。 my $a = 1000; my $b = \$a; # \でリファレンスを作成、$bに$aのアドレスが代入されます。 print $$b; # $で$aの値を参照する。 結果 1000 2次元配列で使う場合はこんな感じ。 @a = ( ['google','goo'], ['adobe','microsoft'], ); print $a[0][1],"\n"; print $a[0]->[1]; # どちらでもOKです 結果 goo
その他の回答 (3)
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 簡単にまとめますと。 ・ポインタの概念は参照という形で存在するが、ポインタ操作(演算)は出来ない ・二次元配列はないが、配列の中に配列を入れることで、「配列の配列」によって近しいことが可能である という感じになります。 Cライクに書きますと。 例えば char *pwk; char wk[] = "abc"; とあるときに、 pwk = wk; は可能ですが、例えばこれに char c; pcwk ++; /* ポインタ演算 */ c = pwk[0]; という操作は無理になります。 配列は…もしC++でSTLをご存知でしたら、いわゆる vector<vector<int> > の表現方法が、#1さんの書かれている配列の方法と等価になろうかと思います。
お礼
ありがとうございました。
- Werner
- ベストアンサー率53% (395/735)
Perlにはリファレンスという概念があり、 これがC/C++のポインタに近いです。 2次元配列を使いたい場合は、 「配列へのリファレンス」の配列が使えます。 (Cで *array[10] で宣言されるような、ポインタの配列に相当。) ただ、Cで2次元配列を使いたいときによく使われる配列の配列(例: array[10][10])はたぶんできないと思います。 (Perlでは配列要素にはスカラーしか入らないので。リファレンスはスカラー。) でも先に述べたやり方があるのであまり問題にはならないと思います。
お礼
#1さんの回答でなんとかできました。 どうもありがとうございました。
- murashin3
- ベストアンサー率42% (55/129)
基本的にはPerlにはポインタはありません。 ハンドルと各種の変数、演算の組み合わせでなんとかします。 (Perlには非常にたくさんの拡張モジュールがあり、その全てを 把握するのはとても困難なほどなので、中にはポインタに相当する 操作をサポートするモジュールがあるかもしれませんが・・・) 「ポインタを使わないので移植が容易」ということが この手の言語のメリットでもあるので、どうしてもポインタが 必要な実装はC/C++で行うべきと思われます。 http://www.tohoho-web.com/wwwperl.htm
お礼
拡張モジュールを調べ、大変参考になりました。 回答ありがとうございました。
お礼
わかりやすい回答どうもありがとうございました。