• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サンプルの意味)

Perlの意味わからない部分について

このQ&Aのポイント
  • Perlのコードを実行している中で、意味が分からない部分があります。
  • 具体的には、★の部分が理解できません。
  • また、$som->partsをprintすると、"ARRAY(0xxxxx)"という出力がされますが、これの意味もわかりません。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> $som->partsをprintすると、"ARRAY(0xxxxx)"が出力されます。 > 普通の配列を出力してもARRAY(0xxxx)とは出力されませんよね?これはどういう意味なんだろう・・・ これは、$som->parts が配列のリファレンスであることを示しています。 Cがわかるならポインタのようなもんだと思ってください。 最近のPerlプログラミングにおいてはリファレンスは 非常に重要な概念ですので、よく調べておくことをお奨めします。 とりあえず perldoc perlref で入門レベルの知識は得られます。 #探せば日本語訳もあるでしょう んで、 >実際に動かしてみたのですが"Not a SCALAR reference"エラーで動きません。 このエラーは > ★foreach my $part (${$som->parts}) { ここで出てませんでしたか? 最初に書いたとおり、$som->parts は配列のリファレンスなのに、 スカラーのリファレンスとして解決しようとしているので、 > "Not a SCALAR reference" 「スカラーのリファレンスじゃないわ、ボケっ」 と文句たれてるわけです。 そもそも、for ループの処理対象なので、スカラーがここに置かれるのは おかしいですね。 写し間違いとかありませんか? たぶん、@{$som->parts} が正しいと思うんですが。 > ★ print $part->stringify; こっちはたぶんSOAP使って呼び出したところの 仕様によるんで断言できませんけど、 名前からするとクラスを文字列化してるんじゃないですかね。 要はわかりやすいであろう形式にするメソッドだと思います。 あと、本なら初めてのPerlあたりを読んどくといいんじゃないでしょうか。 日本人の筆者が書いた書籍ではリファレンスを きちんと説明した本はなかったと思います。

mozori01
質問者

お礼

ご回答ありがとうございます! エラーの原因はまさに、おっしゃる通りでした。 for文の指定で、特別なスカラーを入れて回す特殊な方法なのかと、悩んでいました。 おそらく、"@{$som->parts}"の書き間違えかと思います。 取り出した配列の中身が、ハッシュのリファレンスだったりと、解決後も多少四苦八苦しましたが、 リファレンス=Cのポインタのイメージで追っていったら解決できました。 ありがとうございました。

関連するQ&A