![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
基本的にはperlの配列は一次元のスカラーなデータしか持てませんので、この場合は無名ハッシュのリファレンスと言うことになります。
配列の要素へのアクセスは[]を使いますよね。
$a[2]
みたいな感じです。これと同じようにハッシュは
$a{'abc'}
みたいな感じで使います。
つまり[]は配列、{}はハッシュです。
この場合{}の前に何も名前がないので無名ハッシュとなります。
それで配列の要素はスカラーなので無名ハッシュのリファレンスと言うことになります。
何かを初期化するためのものでしょうか?
ちなみにperlはCなどとは違い初期化していなくてもいきなり使えます。しかしわたしはわかりやすいようにあえて明示的にこのように初期化するのが好きですが。
この例だと
push(@array, { 'abc' => 'ABC' });
こんな感じで使うと、
$array[0]->{'abc'} は ABC となります($array[0]{'abc'}でも構いません)。
将来的にこんな感じで@arrayを使いたいのだと思います。これはそのための初期化だと思われます。
お返事ありがとうございます。
うーん。なんかぴんときません。でもこれは説明の問題ではなく私の理解力の問題だと思います。
無名のハッシュというのを入れておくことで初期化されるとのことですが、それを行わなかったらどうなるのでしょうか?もともとVBの人間で、基本的に変数を宣言したときに初期値が入っているのがあたりまえだったものですから、その辺の概念から勉強せねばなりませんね。
ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?8acaa2e)
No.2
- 回答日時:
>お返事ありがとうございます。
>うーん。なんかぴんときません。でもこれは説明の問>題ではなく私の理解力の問題だと思います。
>無名のハッシュというのを入れておくことで初期化さ>れるとのことですが、それを行わなかったらどうなる>のでしょうか?もともとVBの人間で、基本的に変数を>宣言したときに初期値が入っているのがあたりまえだ>ったものですから、その辺の概念から勉強せねばなり>ませんね。
perlは他の言語に比べると変数の管理が厳密ではありません。この辺がperlのメリットでもあり同時にデメリットでもあります。
他の言語では変数は使う前に宣言しておかなければいけません。その変数が整数型なのか文字型なのか等です。当然整数型の変数に文字列を入れるとエラーになります。
perlは変数を宣言なしでいきなり使えます。おまけに変数の型も曖昧です。時には整数のように振舞うこともあれば、同じ変数なのに使い方次第で文字列になったりもします。
変数型が厳密な言語からperlにくれば最初にそのことに驚くはずです。
リファレンスも当然定義なしで使えます。これをソフトリファレンスと呼びます。上の例ですと、いきなり
$array[0]->{'abc'} = ABC;
こんな感じで使えます。ただソフトリファレンスはバグの元だと思いますのでわたしはあまりお勧めできません。そこで、
push(@array, {});
こう言う風にしておくと、後で見たときに@arrayは無名ハッシュのリファレンスの配列だとわかるのです。何回も言いますけど、この宣言はなくてもいいのです。この宣言は言語的に必要と言うよりプログラマがわかりやすいようにした一種のコメントのようなものだと思って下さい。
perlは変数宣言や初期化が必要ない言語なのです。
なるほど、要はpush(@array, {});
をしておくことで、この@arrayは今後ハッシュを格納する配列として使いますよ、って感じのことを明示化する、というイメージでしょうか?少しつかめてきた気がします。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# c言語について array[i]-‘0’ これってどーゆー意味ですか? (ちなみに16進数を10進数 5 2022/12/06 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
ハッシュのハッシュを実現したい。
-
文字列をハッシュにしなければ...
-
mapのポインタ
-
JSを使ったタブの別ページから...
-
ハッシュ値によるファイルの同...
-
変数が大量にありすぎて美しく...
-
チェックデジットについて
-
VBAにハッシュ関数はないのです...
-
短いハッシュの作り方
-
perlで配列名を動的に作り出したい
-
画面を強制的に再描画させる方法
-
ListBox 複数選択 で オートフ...
-
VBA Dir関数でファイルをループ...
-
VBAのautofilter、criteriaの配...
-
VBAでの一時停止と再開の方法
-
DOSコマンドのループ内のTIMEコ...
-
DoEventsが必要な理由について
-
再帰関数のインライン展開
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
チェックデジットについて
-
ハッシュのハッシュを実現したい。
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
短いハッシュの作り方
-
英語でのシャープとコメの呼び...
-
ハッシュマーク以降のアドレス取得
-
Perlは戻り値で、ハッシュや配...
-
一意(ユニーク)かつ、ソート...
-
ハッシュリストって単にハッシ...
-
ActivePerl がハングアップ
-
mapのポインタ
-
多次元配列から重複を削除
-
Perlのサブルーチンの引数に配...
-
Perlのハッシュ変数のソートに...
-
文字数の短いユニークなID生成
おすすめ情報