スカラーコンテキストでPerlの配列を評価すると便利です。結果として#個の要素が得られます。スカラーコンテキストでPerlでハッシュを評価する理由は何ですか?
しかし、実際にスカラーコンテキストでハッシュを評価できるのは何ですか?例えば
my $scalar_value = %hash;
scalar(%hash)
私の知る限り理解し、それだけで有用であると思わハッシュの内部に関するいくつかの情報を与える「3/4
」のような文字列を生成デバッグ用。
スカラーコンテキストでPerlの配列を評価すると便利です。結果として#個の要素が得られます。スカラーコンテキストでPerlでハッシュを評価する理由は何ですか?
しかし、実際にスカラーコンテキストでハッシュを評価できるのは何ですか?例えば
my $scalar_value = %hash;
scalar(%hash)
私の知る限り理解し、それだけで有用であると思わハッシュの内部に関するいくつかの情報を与える「3/4
」のような文字列を生成デバッグ用。
ハッシュが空であるかどうかを知るためにTRUE/FALSEフラグとして使用できる値を生成します(キーはありません)。例として
:
if (%hash) {
print "Hash has elements\n";
} else {
print "Hash is empty\n";
}
if
が理由ブール表現としてのその使用のスカラコンテキストへの発現を強制します。
それは空虚をテストするために、スカラコンテキストで@array
を使用することに非常に似た概念です:
if (@array) {
# NOT empty!
}
スカラー(%ハッシュは)ハッシュアルゴリズムが正しく動作しているかどうかをチェックすることができます。もしあなたが1000個の鍵を持っていて、2/16のようなものがあれば、すべての鍵は16個の割り当てられたバケツのうち2個だけに解決されます。これは、すべてのキーが非常によく似ていて、多くの衝突を引き起こし、バケット内で長いシーケンシャル検索が行われることを意味します。
デフォルトのバケット数は8
perl -le '$h{a}=1;print scalar %h'
1/8
Prestash 1000のバケット(2の最も近いパワーへ)
perl -le 'keys(%h) = 1000;$h{a}=1;print scalar %h'
1/1024
これとハッシュはまた、あなたがPerlのOOのハッシュを祝福したときに出て役立ちます。 多くのキーがあることが分かっている場合は、スピードアップできます。
違いは何ですか? –
配列は '@' sigilを持つ変数です。リストはソースコード中の一連の項目です。このコードでは '@array =(1、2、3)'、 '(1,2,2)'はリスト、 '@ array'は配列変数です。 perlfaq4にはさらに詳しい情報が含まれています:http://perldoc.perl.org/perlfaq4.html#What-is-the-difference-between-a-list-and-an-array? –
しかし、スカラー(1,2,3,4)を書くことはできませんか?そうであれば "list"はあなたのステートメントに基づいて正しいのですか? –