No.1ベストアンサー
- 回答日時:
基本的にはperlの配列は一次元のスカラーなデータしか持てませんので、この場合は無名ハッシュのリファレンスと言うことになります。
配列の要素へのアクセスは[]を使いますよね。
$a[2]
みたいな感じです。これと同じようにハッシュは
$a{'abc'}
みたいな感じで使います。
つまり[]は配列、{}はハッシュです。
この場合{}の前に何も名前がないので無名ハッシュとなります。
それで配列の要素はスカラーなので無名ハッシュのリファレンスと言うことになります。
何かを初期化するためのものでしょうか?
ちなみにperlはCなどとは違い初期化していなくてもいきなり使えます。しかしわたしはわかりやすいようにあえて明示的にこのように初期化するのが好きですが。
この例だと
push(@array, { 'abc' => 'ABC' });
こんな感じで使うと、
$array[0]->{'abc'} は ABC となります($array[0]{'abc'}でも構いません)。
将来的にこんな感じで@arrayを使いたいのだと思います。これはそのための初期化だと思われます。
お返事ありがとうございます。
うーん。なんかぴんときません。でもこれは説明の問題ではなく私の理解力の問題だと思います。
無名のハッシュというのを入れておくことで初期化されるとのことですが、それを行わなかったらどうなるのでしょうか?もともとVBの人間で、基本的に変数を宣言したときに初期値が入っているのがあたりまえだったものですから、その辺の概念から勉強せねばなりませんね。
ありがとうございました。
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ランキング
-
まったく同じファイルのハッシ...
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
CPANの「Mail::Mailer」 Retur...
-
VBAでの一時停止と再開の方法
-
画面を強制的に再描画させる方法
-
CSVファイルの特定の行だけを読...
-
Escキーを押すと、中断する時と...
-
乱数の桁数指定、または範囲指定。
-
VBAのautofilter、criteriaの配...
-
ボタンが押された時にループか...
-
アクティブセルから、A列最終行...
-
フラグについて
-
DOSコマンドのループ内のTIMEコ...
-
VBAで3秒だけ時間を止めたい
-
perlで配列の要素が空なのを知...
-
配列を初期化する時ってどうす...
-
VBのReturnの使い方
-
VB2010でCSVファイルの読み込み
-
素数の個数を求めるプログラミング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースでユーザーのパス...
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
ハッシュ値が一致したデータは...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
UTF-8で書かれたJSPの日本語文...
-
チェックデジットについて
-
ハッシュマーク以降のアドレス取得
-
ハッシュリストって単にハッシ...
-
一意(ユニーク)かつ、ソート...
-
多次元連想配列の削除
-
英語でのシャープとコメの呼び...
-
perlで配列名を動的に作り出したい
-
連想配列のサイズ制限
-
ハッシュ値によるファイルの同...
-
全ての変数を初期化する方法は...
-
文字列をハッシュにしなければ...
おすすめ情報