Perl入学式 を卒業したら、仕事が楽になった話

  • 18
    いいね
  • 1
    コメント

自己紹介

  • sironekotoro と申します
  • かわいらしいハンドルネームですが中身はおっさんです
  • 2013年、スカラー変数・配列・ハッシュは分かるものの、リファレンスは分からない、という状態で入学し、卒業しました
    • リファレンス分からなくてもプログラムは書けらぁ! そんなふうに考えていた時期が俺にもありました
  • お仕事は、業務委託先でセキュリティアプライアンスサーバ(中身はLinux)のリモート保守(10%)・社内ヘルプデスク(10%)・その他雑用(80%)をやってます
  • 数年前はプロバイダで一般ユーザ相手にダイヤルアップ、ADSL、光接続、メール設定、ホームページへのFTPアップロードなどのコールセンター業務をしていました

Perl入学式 を卒業したら、仕事が楽になった話

  • 上にも書いたように仕事のほとんどが雑用で非定型なんですが、だからこそPerlは大いに役に立っています

1. よその部署からよく依頼される「ログファイルから一致する項目を日別で集計」

Perl入学式「前」

  1. ターミナルで該当ログ表示させ、テキストエディタにコピペ
  2. テキストエディタの置換機能で整形し保存
  3. ファイルをExcelで読み込み
  4. Excelのフィルタを駆使して集計

Perl入学式「後」

use strict;
use warnings;

my $hoge;
foreach my $row (<DATA>) {
    chomp $row;
    my ( $date, $country ) = split / /, $row;
    $hoge->{$date}->{$country}++;
}

foreach my $date ( sort keys %{$hoge} ) {
    print $date , "\n";
    foreach my $country ( sort keys %{$hoge->{$date}} ) {
        print "\t", $country, "\t", $hoge->{$date}->{$country}, "\n";
    }
}

# DATAは例ですが、大体こんな感じです
__DATA__
0102 Japan
0102 Japan
0103 England
0103 China
0103 America
0104 Japan
0104 America
  • 結果
0102
    Japan   2
0103
    America 1
    China   1
    England 1
0104
    America 1
    Japan   1
  • リファレンス大活躍です
  • これはPerl入学式でリファレンスに触れ、かなりの数の練習問題をこなしたからこそ、と思っています
  • 今ではリファレンスの無いPerlスクリプトは考えられないほどです
    • 通販番組みたいな口上だけど本当に
  • またData::Dumperを利用して変数の中身を立体的に「見る」方法を教えてもらい、これが理解する上で大きな助けになりました

2. 業務で使ってるサイトをもっと便利に改造(with Javascript)

  • サーバーのグローバルIPアドレスが一覧表示されている業務用ページを参照し、各々の逆引きドメイン名を確認する

Perl入学式「前」

  1. ページを表示する
  2. IPアドレスを選択して Ctrl + c (コピー)する
  3. 心を込めて「IPひろば 」の入力欄に Ctrl + v して調べる
  4. 2-3を繰り返す
  5. 使いすぎて利用制限に引っかかる
  6. どっか別のドメイン検索できるサイトを探す

Perl入学式「後」

  1. Javascript(Gresemonkey)とローカルで立てたmojoliciousのサイトを利用する
  2. Gresemonkeyでページ読み込み完了後、ページ内のIPアドレス部を取得し、XMLHttpRequestでmojoliciousにIPアドレスをgetで投げるスクリプトを書く
    • 後日、GM_xmlhttprequest というGresemonkeyのローカル関数使えばもっと楽と判明
  3. mojoliciousはgetで渡ってきたIPアドレスを名前解決モジュールに渡す
  4. 名前解決モジュールはIPアドレスを逆引きし、ドメイン情報を返す
  5. mojoliciousから返されたドメイン情報をJavascriptのappendChildでページに追記
# 抜粋 名前解決モジュール
use Net::Nslookup;
my $ip_address = shift;
my $host = nslookup( host => $ip_address , type => 'PTR' , server => ['8.8.8.8' , '8.8.4.4']);
return $host;
  • これにより、ページを表示するだけでドメイン情報も一緒に表示され、とてもとても仕事が楽に

3.その他

  • とりあえず、スクリプト言語的なものなら書いて実行してみることが怖くなくなりました
  • おかげで、シェルスクリプトはもちろん、Teratermのマクロなんかも自分で好きに組めるようになりました

まだ勉強してます

  • 以上、Perl入学式で学んだことを活用し、仕事がとても楽になったという報告でした
    • ほぼ定時に帰ることができるようになってます
  • 現在はPerlでオブジェクト指向を学び、それを自作のプログラムで生かそうとしています
  • 来年は「ラクダ本」こと「プログラミングPerl」に取り掛かる予定です。すごい楽しみです。