Perl tips -- 連想配列

ファイル内のタグの個数を数える

  perlには連想配列と呼ばれる強力な機構があります。
これを使うと、単語の数を数えるなどといったことが簡単にできます。
#!/usr/bin/perl
#
open(IN,"index_ja.html") || die "$!";
@a = <IN>;
close(IN);

#連想配列
foreach (@a) {
    @b = split(/>/,$_);
    foreach (@b) {
        if (/<([^>\/\s]+)/) { # HTML内のタグの数を数える
            #print "hash[" . $1 . "]= " . $hash{$1} . "\r\n";
            $hash{$1}++;
        }
    }
}

@keys = keys( %hash ); #連想配列からキーを取り出す
@keys = sort(@keys); #ソートする
foreach (@keys) {
    print "hash[" . $_ . "]= " . $hash{$_} . "\r\n";
}

ファイル内のリンクを被らないように取得する

  リンクをファイルから抽出するような場合、 抽出したものの中で同一のものを排除したいような場合も、 連想配列を使えば簡単にできます。
#!/usr/bin/perl
#
open(IN,"index_ja.html") || die "$!";
@a = <IN>;
close(IN);

#連想配列
foreach (@a) {
    @b = split(/>/,$_);
    foreach (@b) {
        if (/<a\s+href\s*=\s*\"([^\"]+)/) { #リンクを抽出する
            #print "hash[" . $1 . "]= " . $hash{$1} . "\r\n";
            $hash{$1} = 1;
        }
    }
}

@keys = keys( %hash ); #連想配列からキーを取り出す
@keys = sort(@keys); #ソートする
foreach (@keys) {
    print "link[ " . $_ . " ]\r\n";
}
#