第5章 ハッシュ 練習問題

ここもまだまだ簡単。

5-1 名前を入力してそれに対応した姓を出力する

use strict;

my %nameset = (
    "akari" => "mizunashi",
    "aika"  => "granzchesta",
    "alice" => "carroll"
);

print "input a name: ";
chomp(my $name = <STDIN>);

print "family name is $nameset{$name}\n";

実行して、"akari"と入力してみると、

$ ./ex5-1.pl 
input a name: akari
family name is mizunashi

となってうまくいった。解答によるとchompではじめて現れた変数にmyしたりするのは良くあることらしいので、安心。

5-2 テキスト中に現れる単語の数を数える

単語は改行区切りですよ。以下のような内容のwords.txtを用意した。

haruhi
mikuru
yuki
yuki
haruhi
kyon
haruhi
mikuru

そして、書いたプログラムはつぎのようなの。

use strict;

chomp(my @lines = <STDIN>);

my %words;
foreach (@lines) {
    $words{$_} += 1;
}
foreach my $word (sort keys %words) {
    print "$word: $words{$word}\n";
}

また、変なとこにmyがある気がするが、これも大ジョブにちがいない。結果は、

$ cat words.txt | ./ex5-2.pl 
haruhi: 3
kyon: 1
mikuru: 2
yuki: 2

おうらい、おうらい。

しかし、まだ基本的な内容というのに進みが遅いなぁ。書く必要のなさそうなとこはどんどん抜かしちゃおうかしらね。

初めてのPerl

初めてのPerl

  • 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/05
  • メディア: 単行本
  • 購入: 15人 クリック: 474回
  • この商品を含むブログ (294件) を見る

WEB+DB PRESS vol.32を買ってきた

WEB+DB PRESS Vol.32

WEB+DB PRESS Vol.32

Larry Wallのインタビューがあるというので買ってきた。うわん、短い。まだ、あんまり読んでいないけど、RESTの記事がなかなかに参考になった。

RESTがWebサービスを提供するのに、いろいろ使われているらしいってのは知ってたけど、具体的な内容はまったくさっぱりだったのでちょっとは理解できたかしら。Webサービスをいろいろと使ったプログラムもためしに書いてみたいなー。ほら、はてな認証APIとかも出たしね。

HTTPのメソッドの話題が出ていたので、フォームデータの送信 -- ごく簡単なHTMLの説明も読みました。ごく簡単なHTMLの説明は、ずいぶん前に読んだけど身に付いてないなぁ。

第5章 ハッシュ

ここはそんなにも難しくなかったので、軽くまとめ。

配列では、[](ブラッケット)を使いますが、ハッシュでは{}(ブレース)を使う。

# 配列
$sos[0] = 'haruhi;
# ハッシュ
$sos{'dancho'} = 'haruhi;

ハッシュ全体を表すのには、%(パーセント記号)を使いう。また、ハッシュ全体を一気に定義するには=>を使うとわかりやすい。=>はコンマとほとんど等価なのね。

# コンマだけで定義
my %sos = ('dancho', 'haruhi', 'maid', 'mikuru', 'megane', 'yuki');
# わかりやすく=>を使って定義
my %sos = ('dancho' => 'haruhi', 'maid' => 'mikuru', 'megane' => 'yuki');

=>使った方がどうみても分かりやすい。


keys関数はハッシュのキーのリストを返す。values関数はハッシュの値のリストを返す。

my %sos = ('dancho' => 'haruhi', 'maid' => 'mikuru', 'megane' => 'yuki');
my @k = keys %sos;
my @v = values %sos;
print "@k\n";
print "@v\n";

実行すると、

$ perl sos_hash.pl 
dancho megane maid
haruhi yuki mikuru

となる。


each関数はハッシュを順にたどりながらキーと値のペアのリストを返す。

my %sos = ('dancho' => 'haruhi', 'maid' => 'mikuru', 'megane' => 'yuki');
while (my($key, $value) = each %sos) {
    print "$key => $value\n";
}

myはこんな風に使っても良かったっけな。実行すると、

$ perl sos_hash.pl 
dancho => haruhi
megane => yuki
maid => mikuru

となる。


exists関数はハッシュにあるキーが存在するかを確かめるのに使う。delete関数はハッシュから指定したキーを削除する。

my %sos = (
    'dancho' => 'haruhi',
    'maid' => 'mikuru',
    'megane' => 'yuki',
    'zatsuyou'=>'kyon' # 追加した
);

delete $sos{'zatsuyou'};
if(!exists $sos{'zatsuyou'}) {
    print "deleted!\n";
}

これを実行すると、"deleted !"と表示される。

初めてのPerl

初めてのPerl

  • 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/05
  • メディア: 単行本
  • 購入: 15人 クリック: 474回
  • この商品を含むブログ (294件) を見る