皆さんHash使ってますか!
Hashを使うと、たくさんの重複したデータから、ユニークなデータだけを取り出すことが出来ます。
例
use strict;
use warnings;
use Data::Dumper;
my @cars = qw/honda honda suzuki toyota toyota daihatu mitubishia/;
my %report = ();
for my $car ( @cars ) {
$report{ $car }++;
}
print Dumper \%report;
結果
$VAR1 = {
'mitubishia' => 1,
'toyota' => 2,
'suzuki' => 1,
'daihatu' => 1,
'honda' => 2
};
車を作ってるメーカが重複して入っている配列から、重複を取り除いたメーカを手に入れることができましたね!
実践例 : アクセスログから、ipの一覧と件数を取得する
武君のサーバは誰にも教えてないはずなのに、Webにアクセスがたまにきてることがわかりました。どのipから来てるのかしりたいので、調べることにしました。
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
use Data::Dumper;
my @files = @ARGV;
my %ips = ();
for my $file ( @files ) {
my $fh = new IO::File;
$fh->open( $file );
while( <$fh> ) {
my ( $ip ) = split(/\s/);
$ips{$ip}++;
}
$fh->close;
}
print Dumper \%ips;
access_log , access_log.1 access_log.2 のような複数のファイルをチェックします。
./ips.pl access_log*
やったね!武君!



Leave a comment