Upload
debug-ito
View
142
Download
0
Embed Size (px)
Citation preview
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
(対象Perl Lv.2-3)
2014-12-22
伊藤俊夫 (debug-ito)
自己紹介伊藤俊夫東芝 研究開発センターネットワークシステムラボラトリ
id:debug-itoCPAN: toshioito
宣伝
Gnuplot::Builder 0.27 is released!
本題
_人人人人人人人人人人人人人人人人人人_> use v5.8.0つけといた方がいいよ! < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
やりたいことBefore
package BusyBird;use strict;use warnings;...
Afterpackage BusyBird;use v5.8.0; ## <= コレuse strict;use warnings;...
$ find lib name "*.pm"lib/BusyBird/Watcher/Aggregator.pmlib/BusyBird/StatusStorage/SQLite.pmlib/BusyBird/StatusStorage/Common.pmlib/BusyBird/StatusStorage/Memory.pmlib/BusyBird/Log.pmlib/BusyBird/Timeline.pmlib/BusyBird/Main.pmlib/BusyBird/Watcher.pmlib/BusyBird/Test/StatusStorage.pmlib/BusyBird/Input/Generator.pmlib/BusyBird/Util.pmlib/BusyBird/SafeData.pmlib/BusyBird/Main/PSGI.pmlib/BusyBird/Main/PSGI/View.pmlib/BusyBird/Filter/Twitter.pmlib/BusyBird/StatusStorage.pmlib/BusyBird/Flow.pm
こういう時こそPerlワンライナー
とりあえず一つのファイルを相手にする
$ perl pi \ e '$_ .= "use v5.8.0;\n" if $. == 1' \ lib/BusyBird.pm
全ファイルに処理を適用する$ find lib name "*.pm" exec \ perl pi \ e '$_ .= "use v5.8.0;\n" if $. == 1' \ {} \;
eオプション引数をPerlスクリプトとして実行
$ perl e 'print "Hello, World!\n"'Hello, World!
pオプション入力ファイルの各行を繰り返し処理各行が$_として入力される処理後に$_を出力する
$ cat sample.txt ABC$ perl pe '$_ = "> $_"' sample.txt > A> B> C
iオプション入力ファイルを出力結果で書き換える
$ perl i pe '$_ = "> $_"' sample.txt $ cat sample.txt > A> B> C
i[extension]元ファイルを別名で残す
$ perl i.orig pe '$_ = "> $_"' sample.txt $ cat sample.txt> A> B> C$ cat sample.txt.orig ABC
$.変数現在読んでいる行番号を保持する
$ perl pe '$_ = "$.: $_"' sample.txt 1: A2: B3: C
$ perl pi \ e '$_ .= "use v5.8.0;\n" if $. == 1' \ lib/BusyBird.pm
「1行目にuse v5.8.0;をくっつけて、他は素通し」eオプションpオプションiオプション$.変数statement modifier (後置if)
便利ですね!
参考man perlrunE: e かつ use featureM: モジュールの使用m: M ただし import無しn: p ただし print無しa: 入力のカラム分割F: カラムセパレータl: chomp かつ $\ = $/C: UTF-8入出力
man perlvar@F: a使用時の各カラム$ARGV: 現在<>で読込中のファイル名ARGVOUT: iオプションで現在の出力先のファイルハンドル
余談iオプションをpやnをつけずに使うとどうなるのか?
→ やらない方がいいです
http://qiita.com/debug-ito/items/4847ef0827a8d2902469
ありがとうございました