• ベストアンサー

ポインタみたいなもの

Perlってポインタは利用できないんですよね。配列の要素を1つ1つ処理していってその要素の内容によって更にその配列に要素を指定した順番に追加しながら処理していくような処理を実現するにはどうしたらよいのでしょうか。C言語だったら線形リストでできるのですが。

  • Perl
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.2

Perl にも「リファレンス」という概念が ありますよ。 C 言語でポインターを取得するときは、変数の前に 「&」をつけますが、Perl では、変数の前に 「¥」をつけることで、リファレンスが使えます。 $list[0] = \@item; これで、list 配列の先頭には、item 配列への参照が 保存されます。 これは $ref_item = $item[0]; と取り出して、@$ref_item とすれば、@item と同じ 配列を指しています。 具体的には @item[0] = 1; ${$ref_item}[0] = 1; は同じことになります。お分かりいただけましたか? http://www.webkoza.com/doc1/perl_k.htm

参考URL:
http://www.webkoza.com/doc1/perl_k.htm

その他の回答 (2)

  • togino
  • ベストアンサー率75% (97/129)
回答No.3

No2 にて >これは >$ref_item = $item[0]; すみません $ref_item = $list[0]; の間違いです。ごめんなさい。

  • yoneda_16
  • ベストアンサー率47% (166/350)
回答No.1

perlにはポイントはありませんが参照(リファレンス)がありますのでそれで事足りるんじゃないでしょうか。

参考URL:
http://www98.sakura.ne.jp/~jun/perl/ref-old.html

関連するQ&A

  • ポインタ

    C言語で、 int c[6]と配列を作って、 ポインタでc[100]を指定すると、COREがでますよね? これをやると、コンピュータがフリーズする場合があるのですがなぜですか?

  • C言語 ポインタと配列

    C言語で配列をあつかう場合、ポインタをつかうか、配列の添え字を使って処理するか迷うのですが、どちらが良いのでしょうか? 処理速度ではどちらが上でしょうか?

  • 関数へのポインタ渡しでの配列の初期化について

    はじめまして、C言語の基本的な質問をさせてください。 C言語で、外部関数へポインタで引数を渡す場合に、 関数に渡されるのはアドレスですよね? で、渡された関数側でそのポインタの配列の初期化を するときにはアドレスだけの情報だと、要素数がいくつ あるか分からず、領域の破壊をしてしまいそうな気が するのですが?いかがでしょうか? また、関数かなんかで、配列の要素数が分かる関数が あったような気がするのですが、それもアドレスだけ でわかるのでしょうか?

  • 配列とポインタの違いについて

    書籍などで配列とポインタの違いについて勉強していますが、未だによくわかりません。 C言語における配列とポインタの違いについて教えて頂けますでしょうか?

  • ポインタ

    C言語のポインタみたいなことはできないかなと思い、 <? function a ($a){ print $a; $a="z"; } $c = "x"; a(&$c); print $c; ?> と興味本位でやってみたところ、 xz と表示されました。googleで "php ポインタ" と検索してもそれっぽい解説をみつけられなかったのですが、phpではC言語のポインタっぽい挙動をみせるこの機構をなんというのでしょうか・・・?(perlではリファレンスだった)

    • ベストアンサー
    • PHP
  • ポインタのポインタについて

    VisualC++2008 の、Windowsフォームアプリケーションを使用しています。 自作クラスの中に組み込む線形リスト的なものを、後で移動したりする場合実体のコピーをしなくて済むよう 今、「アドレス」を格納する配列を作りたいです。 しかし、ポインタのポインタに対して色々実験してみたのですが どうもあと一歩ぐらいのところで手が届きません フォームのイベントで、試しに以下のように書いてみると Text = ""; char *a[8], b =7 ,*c = new char[7], i =7; while (i) { c[i] = --i; a[i] = &c[i]; } a[7] = &b; while (i<8) Text += *(*a+i++); delete c; これを実行したとき フォームのTextが 「01234567」 となってほしいのですが 「0123456-3」 となってしまいます。 試してみたのですが その直後にbを調べると、やはりちゃんと7になっており また a[7] と &b をifおよび==を用いて比較してみても 同じになっています。 なお、この-3というのはどうも、解放処理の後でそこにアクセスした場合はこの場合 「-35」 となり、確保中の時に代入してないアドレスにアクセスすると 「-3」 となるような感じです。 このような、連続していないアドレスへの参照を配列化しておいて取り出す事は出来ないのでしょうか?

  • ポインタのキャスト方法

    こんにちは。 C言語でポインタキャストしているところがどうしてもうまくいきません。 以下のような要素数10個の型配列を指すポインタを キャストしたいのですがこれだと警告文がでてしまうので きちんとキャストしたいのですが、 どうしてもうまくいきませんでした。。。 1 short int *ibuf; 2 short int (*ibuf_tmp)[10]; 3 ibuf_tmp=ibuf; ※←ここです 宜しくお願いします。

  • Perlにはポインタという概念はありますか

    C/C++等にあるポインタの概念は、Perlにはあるのでしょうか? 当方まだ間もないためか聞いたことがありません。 2次元配列があればあるとは思いますがそれも?です。

    • ベストアンサー
    • Perl
  • mapのポインタ

    C++標準ライブラリ map の使用法に関して質問させてください。 winXP, minGW環境最近でC++のプログラミングを始めました。 これまでperlを使っており、とくにハッシュを多用していました。 たとえば入力ファイルに区切りのついたデータがあり、区切りごとに個別のハッシュをつくり、ハッシュのリファレンスの配列を作成します。その後に配列にはいったすべてのリファレンスからハッシュを呼び出して、ハッシュのデータをつかって処理を行う などです。 *入力ファイルから区切りごとにハッシュ%hashを作成 $ref_of_hash = \%hash; push (@array_hash, $ref_of_hash); *ここまでは入力ファイルにしてループ処理 foreach $ref ( @array_hash){      %hash_again = %$ref; *ここでハッシュをつかって処理を行う。 } c++の標準ライブラリにmapがあり、ハッシュとは多少異なるとはいえ、私の使用用途には問題なかったので使い始めました。ですが、マップのポインタをつかった上記のような処理の方法がわからず困っています。 1)mapのポインタから mapの各要素を呼び出すにはどのようにしたらよいでしょうか? 2)mapのポインタをつかった場合 map<double,double>::iterator it; for( it = my_map.begin(); it != my_map.end(); it ++){ //do something } のようなイテレータを使う場合、.begin .engはポインタを使ってどのように記述すればよいでしょうか。 3)このようなmapのポインタを利用したソースが書かれているサイトなどがあれば教えていただけないでしょうか。 C++をはじめて間もないので用語の間違いや勘違いがあるかもしれませんが、よろしくお願いします。

  • C言語のポインタについて

    C言語のポインタ(配列もポインタに含まれるのか?)について質問です。 係数を行列形式で表される状態方程式などの2変数以上の方程式を解くプログラムにおいてよくポインタや配列が使われているのですが、なぜポインタや配列を使うのでしょうか?利点など詳しく教えていただけませんでしょうか。。。 どなたか分かる方よろしくお願いします(*_*)