2012-08-24 12 views
5

申し訳ありませんが、明確な質問ではないかもしれませんが、私はそれを聞いています。私は読書を読んでいないし、私が読んでいることを理解していません。ここでPerlでtypeglobsを参照として使用できる理由

は、「プログラミングPerlの」からの抜粋です:

何か間接参照で、あなたの方法は、常にあなたが探している 参照先の種類を示しているので、型グロブを使用することができます型グロブにはさまざまな型の複数の参照先が含まれているにもかかわらず、参照は同じように です。したがって $ {* main :: foo}と$ {main $ foo}は同じスカラー変数にアクセスしますが、 後者がより効率的です。私にとって

それは間違ったのようなものを表示され、それがこのようことをしたらそれが正しいだろうと:参照は常にスカラであるので、あなたが代わりにスカラ変数の型グロブを使用することができます

コンパイラは必要なものを知っています。

原因本書の読者は、参照がスカラー変数以外のもの(すなわち、シンボリックテーブルのスカラーエントリ)であると考えることができます。いったん私は警告:use of array as a reference is deprecatedを見たので、 "Programming Perl"のこの段落は意味があります。参照は単なるスカラーではないかもしれませんが、新しい第4版では最新のPerlに準拠するように変更されていません。

この本の正誤表を確認しましたが、何も見つかりませんでした。

私の前提は正しいですか?もしそうでなければ、私が間違っているところで誰かが説明するのがとても楽しいだろう。

ありがとうございます。

答えて

15

いいえ、それは普通のリファレンスとは異なり、タイプグロブは同時に複数のタイプのものを含んでいます。通常 逆参照構文は、すでにあなたが望む型グロブのどのスロットを示しているので、あなたは特別な「構文を逆参照型グロブ」を必要としない

use strict; 
use warnings; 
use 5.010; 

our $foo = 'scalar'; 
our @foo = qw(array of strings); 
our %foo = (key => 'value'); 

say ${ *foo };     # prints "scalar" 
say ${ *foo }[0];    # prints "array" 
say ${ *foo }{key};    # prints "value" 

:しかし、中にあなたの方法は、それはあなたが望むものの種類を示しデリファレンス逆参照する。

字句変数がタイプグロブに関連付けられていないため、これはmy変数では機能しません。

サイドノート:「参照としての配列」の警告はこれに関係しません。この構文は、@array->[0](これは$array[0]と同じ意味です)を参照しています。これは決して有効な構文ではありません。それは偶然にPerl 5パーサーに入ってしまい、ラリーが気づいたら非難されました。

+0

は、私はしかし、 'として、あなたの道を、それを読んでください暗黙のうちに '作成された? – user907860

+2

@caligula、いいえ、あなたが参照を作成していないからです。型グロブは既に一種の参照です。あなたは、逆参照するスロットを選択するだけです。 – cjm

1

これはまさにあなたの質問に答えていませんが、私は型グロブを使用すると、コンパイラに伝える方法の一種であるので、彼らは、スカラーおよび参照より動的である型グロブ

で体験何を伝えるために試すことができます「ここにはヒントがあります。あなたが何をしなければならないか、あなた自身が推測してください」

リファレンスは常に厳密な型とターゲットを持っています。型グロブには、変数(name)やファイルハンドル(STDOUTのような)やその他の値を指すことになっていることを示す文字列が含まれている可能性があります。

奇妙なことを達成するために、タイプグロブでのみ可能なので、私はmordern perlでも重要だと思います。

1

図解されているPerlGutsは、Perlの内部構造を知るための方法です。

http://www.cpan.org/authors/id/GAAS/illguts-0.09.pdf

これまでに与えられた答えは何が起こっているのかを説明するものであるが、変数は、あなたが答えは実際には非常に簡単で、アナロジーは、実際に実装よりも少ないクリアされているを見てみましょうする方法をperlの店舗学びます。

PS:あなたが理解したいで賞賛されている - それは、参照の種類がされるのかを示すデリファレンスそれが将来のために良い代わりにあなたを立つ:)

+0

リンク切れ:( – badp

関連する問題