Perlでリクに答えるスクリプトを作るスレ
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
550:デフォルトの名無しさん 06/04/02 05:08:26 スマソ。書き込む前に送信してもうた・・・ >>547 IPをキー、国名を値にもつハッシュを作り、データベースクラスにtieしてみては? 2万4千行をメモリに持つのはつらいと思う。 551:550 06/04/02 05:38:58 ちょっと練習で書いてみた。IPは悩んだ末、強引に10進数に変換した。 my $data = <<EOF; A-221.184.0.0-221.191.255.255 B-221.240.0.0-222.15.255.255 C-222.144.0.0-222.151.255.255 EOF unlink 'test.db'; use Fcntl; use DB_File; tie my %db, 'DB_File', 'test.db', O_RDWR|O_CREAT, 0644, $DB_BTREE or die; foreach(split/\n/, $data) { my ($country, $from, $to) = split /-/; for($from, $to) { s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1*256**3+$2*256*256+$3*256+$4/e; } $db{$from-1} = 'N/A'; $db{$to} = $country; } untie %db; sub find_country { my $query = shift; $query =~ s/(\d+)\.(\d+)\.(\d+)\.(\d)/$1*256**3+$2*256*256+$3*256+$4/e; my $x = tie my %db, 'DB_File', 'test.db', O_RDONLY, 0644, $DB_BTREE or die; my ($ip, $country) = ($query, 'N/A'); $x->seq($ip, $country, R_CURSOR); return $country; } print find_country('221.239.0.1');
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4354日前に更新/217 KB
担当:undef