No.2ベストアンサー
- 回答日時:
* は「型グロブ」です。
Perl5において、「参照」はリファレンスを指しますので、この場合正しくありません。
Perlでグローバル変数を使うと、各パッケージに存在する「名前テーブル」が参照されます。
名前テーブルの実体はハッシュで、キーが変数名、値がその変数へのポインタです。
しかしPerlでは、1つの変数名に対し、複数の意味を持たせることができます。
例えば $value と @value です。
この2つの変数において、名前テーブルハッシュのキーは、どちらも value です。
これだと両方の値を格納することができませんよね?
これをうまく実現するために、名前テーブルハッシュの値は、複数のスロット(部屋)でできています。
ちょうどCの構造体のような形です。
この「名前テーブルの区画をなす、複数スロットで構成された構造体」が型グロブです。
型グロブ *value からスカラー値を取り出すには
${*value}
とします。
配列値を取り出すなら
@{*value}
です。
Perlは $value という記述を見つけると、名前テーブルから value を探し、そこからスカラー値を取り出しているのです。
ちなみに名前テーブルは、
%パッケージ名::
というハッシュとして実際にアクセスできます。
特にパッケージ宣言をしていなければ、パッケージ名は main となります。
これを使って先ほどの $value や @value にアクセスするには
${$main::{value}}
@{$main::{value}}
とします。
型グロブも1つのデータなので、代入などを行うことができます。
*other = *value
とすると、*value の全スロットの値が *other に代入されます。
各スロットの値はポインタなので、$other という記述で $value をアクセスできるようになるのです。
同じく @other で @value がアクセスできます。
Perl4にはリファレンスが無かったので、この型グロブを使って参照渡しをしていたのですが、Perl5ではリファレンスを使うのが主流です。
(一部のリファレンスで実現できない機能を、型グロブで実現しているモジュールもあります。)
また、冒頭で書いた通り、型グロブはグローバル変数にのみ存在します。
my変数には型グロブが存在しないので、ご注意ください。
(local変数はグローバル変数を一時退避させて使うだけなので、グローバル変数と考えることができます。)
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- PHP ($_POST['email']??"", ・・・の ??"" の""の意味ですが 2 2022/07/30 06:38
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- JavaScript javascriptでif文と配列を組み合わせて運賃プログラムを完成させたいです。 1 2022/07/03 14:20
- 英語 訳を知りたいです 3 2023/07/23 08:15
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう 6 2022/12/17 15:01
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlは戻り値で、ハッシュや配...
-
一意(ユニーク)かつ、ソート...
-
ハッシュ値を取ったらその取っ...
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
Perlのサブルーチンの引数に配...
-
英語でのシャープとコメの呼び...
-
ハッシュ値によるファイルの同...
-
計算されたハッシュ、レポート...
-
ハッシュのキーを変数で
-
ハッシュ値が一致したデータは...
-
画面を強制的に再描画させる方法
-
perlで2次元配列をサブルーチ...
-
どなたかこのプログラミングを...
-
VBのReturnの使い方
-
VBA for i=1 to lastrow
-
VBAでの一時停止と再開の方法
-
Excel VBA ユーザーフォームの...
-
乱数の桁数指定、または範囲指定。
-
ということですか 他に固定りよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースでユーザーのパス...
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
ハッシュ値が一致したデータは...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
UTF-8で書かれたJSPの日本語文...
-
チェックデジットについて
-
ハッシュマーク以降のアドレス取得
-
ハッシュリストって単にハッシ...
-
一意(ユニーク)かつ、ソート...
-
多次元連想配列の削除
-
英語でのシャープとコメの呼び...
-
perlで配列名を動的に作り出したい
-
連想配列のサイズ制限
-
ハッシュ値によるファイルの同...
-
全ての変数を初期化する方法は...
-
文字列をハッシュにしなければ...
おすすめ情報