以前のリビジョンの文書です


A PCRE internal error occured. This might be caused by a faulty plugin

====== ハッシュのキーと値を全て取り出す - Perl ====== ~~socialite~~ //※この記事は2007年03月06日に書かれた物です// ハッシュの内容を全て出力するには、いくつかの方法がある。 ===== 代表的な3つの方法 ===== まずはもっともシンプルな方法。だが、もっとも使用しないだろう方法。ハッシュのキーと値がずらずら~とただ表示される <code perl> print %ENV; </code> 次に代表的な3つの方法を紹介する。 いずれも「キー,値 <改行>」の組み合わせで全要素が表示される。どれを使うかは状況次第。また個人の趣味もあるだろう。 ==== 1. while, each構文 ==== <code perl> while( ($name, $value) = each %ENV ){ print "$name,$value\n" } </code> ==== 2. foreach, keys構文 ==== <code perl> foreach my $name ( keys %ENV ){ print "$name,$ENV{$name}\n"; } </code> ==== 3. map, keys構文 ==== <code perl> map{ print "$_,$hash{$_}\n" } keys %ENV; </code> ===== ベンチマーク ===== 念のため以下のようにベンチマークを取ってみた。while遅いですね。mapとforeachは良い勝負です。 <code> Benchmark: timing 100000 iterations of FOREACH, MAP, WHILE... FOREACH: 7 wallclock secs ( 7.64 usr + 0.00 sys = 7.64 CPU) @ 13087.29/s (n=100000) MAP: 7 wallclock secs ( 6.68 usr + 0.00 sys = 6.68 CPU) @ 14970.06/s (n=100000) WHILE: 10 wallclock secs ( 9.88 usr + 0.01 sys = 9.89 CPU) @ 10107.14/s (n=100000) </code> <code perl> use Benchmark; #-------------------------------------# #ベンチマーク #-------------------------------------# timethese( 100000, { 'WHILE' => 'while1();' , 'FOREACH' => 'foreach1();' , 'MAP' => 'map1();' } ); sub while1{ my $str = ''; while( my($name, $value) = each %ENV ){ $str = "$name,$value"; } } sub foreach1{ my $str = ''; foreach my $name ( keys %ENV ){ $str = "$name,$ENV{$name}"; } } sub map1{ my $str = ''; map{ $str = "$_,$hash{$_}" } keys %ENV; } </code> ===== 関連書籍 ===== {{amazon>jp:4873113008}} <html><p style="clear:both"></p></html> {{amazon>jp:4798139815}} <html><p style="clear:both"></p></html> {{tag>CGI・Perl例文集 Perl 連想配列 ハッシュ Benchmark ベンチマーク}} ~~socialite~~

コメント

コメントを入力. Wiki文法が有効です:
J A​ M Y B