私がPerlを使う理由

  • 1,805 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,805
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
6
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 私がPerlを使う理由 日本オラクル株式会社 畔勝(あぜかつ)洋平
  • 2. twitter id: yoheiablog: http://d.hatena.ne.jp/yohei-a/
  • 3. 私がPerlを使う理由• 最初に触った言語(1998年頃、大学生のとき) • もしかしたら、JavaScript のほうが先だったかも。。。• どこでも使える • Perl は Oracle Database (10g以降) に同梱されているのでWindows でも使 える • 自由にソフトウェアをインストールできない環境で仕事をすることがあり ます• 私の記憶力が悪い • awk、sed、grep などの正規表現の書き方などをそれぞれ覚えれない。 • awk、sed、grep でできることはだいたい Perl でできる(たぶん)ので、 Perl に絞ると覚えることを減らせる。• 便利なライブラリがたくさんある • CPAN(Comprehensive Perl Archive Network)と呼ばれる巨大なアーカイブ に便利なライブラリがたくさんあります• システムプログラミングができる
  • 4. CPU使用率を 100% にする Perl ワンライ ナー$ perl -e while(1) {}‘
  • 5. CPU使用率を 100% にする Perl ワンライナー(2)• CPUコアが4つの場合$ for i in {1..4}doperl -e while(1){} &done
  • 6. 「ORA-」メッセージを番号別に集計する(1)$ perl -nle /(ORA-[0-9]+)/ and print $1; alert_orcl.log | sort | uniq - c↓実行結果15 ORA-0000120 ORA-014007 ORA-12899 ...
  • 7. 「ORA-」メッセージを番号別に集計する(2)$ perl -nle BEGIN{%h=();}/(ORA-[0-9]+)/ and $h{$1}++;END{map{print "$_:$h{$_}"} keys %h;} alert_orcl.log↓実行結果ORA-00001:15 Perlのみで書いてみるとORA-01400:20ORA-12899:7 ...
  • 8. V$SYSSTAT から特定のデータベース統計情報の差分を出す Perl ワンライナー$ perl -F, -lane /global cache blocks lost/ and printf(qq/%s,%sn/,$F[0],$F[2]-$tmp) and $tmp=$F[2] sysstat.log↓実行結果0904235511,00904235541,10904235611,00904235642,30904235712,00904235742,50904235813,00904235843,0
  • 9. V$SYSSTAT から特定のデータベース統計情報の差分を出す Perl ワンライナー$ perl -F, -lane printf(qq/%s,%s,%sn/,$F[1],$F[0],$F[2]- $h{$F[1]})if(exists($h{$F[1]}));$h{$F[1]}=$F[2] sysstat.log
  • 10. 再帰的にファイル名に接頭辞をつける↓実行前$ find ../a/bar.txt CPANモジュールのFile::Findを使って、find./a/foo.txt コマンドに似たことをしている↓実行$ perl -MFile::Find -e find sub{rename($_,"prefix_$_") if -f}, @ARGV .↓実行後$ find ../a/prefix_bar.txt./a/prefix_foo.txt
  • 11. テキストファイルの特定の行だけ表示する• 1行目だけ表示するperl -lne print if $.<2 file• 10行目まで表示するperl -pe exit if $. > 10 file• 2行目から5行目まで表示するperl -ne print if 2.. 5 file
  • 12. レコードセパレータを変更する• 行モード(デフォルト)perl -e ...• 段落モード(1つ以上の空行をレコードセパレータと認識す る)perl -00 -e ...• ファイルモード(ファイル全体を1レコードとして認識す る)perl -0777 -e ...
  • 13. カスタムフィールドセパレータを使う• 空行をレコードセパレータ、改行コードをフィールドセパ レータにperl -00 -Fn -lane print $F[1] if($F[0] =~ /neo/) hoge.txt awk 的な使い方
  • 14. システムプログラミングはそれほどしていませんが。。。
  • 15. 最後に 長い。。。
  • 16. 「あのー ワンライナーの意味わかってますか?」とコメントいただきました(^-^;
  • 17. そんなときは -MO=Deparse でスクリプト化$ perl -MO=Deparse -wnle BEGIN{%h=();}/(ORA-[0-9]+)/ and $h{$1}++;END{map{print "$_:$h{$_}"} keys %h;} alert_orcl.logBEGIN { $^W = 1; }BEGIN { $/ = "n"; $ = "n"; }LINE: while (defined($_ = <ARGV>)) { chomp $_; sub BEGIN { (%h) = (); } ++$h{$1} if /(ORA-[0-9]+)/; sub END { map {print "${_}:$h{$_}";} keys %h; } ;}-e syntax OK
  • 18. 私が参考にしているブログ
  • 19. 私が参考にしている書籍
  • 20. ご清聴ありがとうございま した