私がPerlを使う理由

2,581 views
2,426 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,581
On SlideShare
0
From Embeds
0
Number of Embeds
845
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

私がPerlを使う理由

  1. 1. 私がPerlを使う理由 日本オラクル株式会社 畔勝(あぜかつ)洋平
  2. 2. twitter id: yoheiablog: http://d.hatena.ne.jp/yohei-a/
  3. 3. 私がPerlを使う理由• 最初に触った言語(1998年頃、大学生のとき) • もしかしたら、JavaScript のほうが先だったかも。。。• どこでも使える • Perl は Oracle Database (10g以降) に同梱されているのでWindows でも使 える • 自由にソフトウェアをインストールできない環境で仕事をすることがあり ます• 私の記憶力が悪い • awk、sed、grep などの正規表現の書き方などをそれぞれ覚えれない。 • awk、sed、grep でできることはだいたい Perl でできる(たぶん)ので、 Perl に絞ると覚えることを減らせる。• 便利なライブラリがたくさんある • CPAN(Comprehensive Perl Archive Network)と呼ばれる巨大なアーカイブ に便利なライブラリがたくさんあります• システムプログラミングができる
  4. 4. CPU使用率を 100% にする Perl ワンライ ナー$ perl -e while(1) {}‘
  5. 5. CPU使用率を 100% にする Perl ワンライナー(2)• CPUコアが4つの場合$ for i in {1..4}doperl -e while(1){} &done
  6. 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. 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. 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. 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. 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. 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. 12. レコードセパレータを変更する• 行モード(デフォルト)perl -e ...• 段落モード(1つ以上の空行をレコードセパレータと認識す る)perl -00 -e ...• ファイルモード(ファイル全体を1レコードとして認識す る)perl -0777 -e ...
  13. 13. カスタムフィールドセパレータを使う• 空行をレコードセパレータ、改行コードをフィールドセパ レータにperl -00 -Fn -lane print $F[1] if($F[0] =~ /neo/) hoge.txt awk 的な使い方
  14. 14. システムプログラミングはそれほどしていませんが。。。
  15. 15. 最後に 長い。。。
  16. 16. 「あのー ワンライナーの意味わかってますか?」とコメントいただきました(^-^;
  17. 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. 18. 私が参考にしているブログ
  19. 19. 私が参考にしている書籍
  20. 20. ご清聴ありがとうございま した

×