Successfully reported this slideshow.
Your SlideShare is downloading. ×

私がPerlを使う理由

Ad

私がPerlを使う理由



    日本オラクル株式会社
    畔勝(あぜかつ)洋平

Ad

twitter id: yoheia
blog: http://d.hatena.ne.jp/yohei-a/

Ad

私がPerlを使う理由
• 最初に触った言語(1998年頃、大学生のとき)
 • もしかしたら、JavaScript のほうが先だったかも。。。


• どこでも使える
 • Perl は Oracle Database (10g以降) に同梱...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 20 Ad
1 of 20 Ad
Advertisement

More Related Content

Advertisement
Advertisement

私がPerlを使う理由

  1. 1. 私がPerlを使う理由 日本オラクル株式会社 畔勝(あぜかつ)洋平
  2. 2. twitter id: yoheia blog: 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} do perl -e 'while(1){}' & done
  6. 6. 「ORA-」メッセージを番号別に集計する(1) $ perl -nle '/(ORA-[0-9]+)/ and print $1;' alert_orcl.log | sort | uniq - c ↓実行結果 15 ORA-00001 20 ORA-01400 7 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:20 ORA-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,0 0904235541,1 0904235611,0 0904235642,3 0904235712,0 0904235742,5 0904235813,0 0904235843,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 -F'n' -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.log BEGIN { $^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. ご清聴ありがとうございま した

×