#!/usr/bin/perl -spi.bak # -s -p -i.bak と同じ
find . -name '*.bak' -print0 | perl -n0e unlink
のようにできます。
perl -ane 'print pop(@F), "\n";'
は、
while (<>) {
@F = split(' ');
print pop(@F), "\n";
}
と等価です。-F を使って区切文字を変更することができま す。
1 p トークン化と構文解析
2 s スタックの表示
4 l ラベルスタックの処理
8 t 実行のトレース
16 o 演算子ノードの構造
32 c 文字列/数値変換
64 P -P のためのプリプロセッサコマンドの表示
128 m メモリ配置
256 f フォーマットの処理
512 r 正規表現の解析
1024 x 構文トリーのダンプ
2048 u 汚染チェック
4096 L メモリリーク (既にサポートされていない)
8192 H ハッシュのダンプ -- values() の横取り
16384 X スクラッチパッドの配置
32768 D 全消去
$ perl -p -i.bak -e "s/foo/bar/; ... "
とすれば、
#!/usr/bin/perl -pi.bak
s/foo/bar/;
とスクリプトで書くのと同じで、これは、
#!/usr/bin/perl
while (<>) {
if ($ARGV ne $oldargv) {
rename($ARGV, $ARGV . '.bak');
open(ARGVOUT, ">$ARGV");
select(ARGVOUT);
$oldargv = $ARGV;
}
s/foo/bar/;
}
continue {
print; # 元のファイル名に出力する
}
select(STDOUT);
と書くのと、-i の形式が、いつファイル名が変わったかを知 るために、$ARGV
と $oldargv を比較する必要がないのを除 いて、同値です。
perl -lpe 'substr($_, 80) = ""'
とします。
gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
これはまず、$\ に改行 ($/ のデフォルト値) を設定し、そ れから $/ にヌル文字を設定します。
while (<>) {
... # ここでスクリプトが実行される
}
デフォルトでは、各行が印字されることはありません。
find . -mtime +7 -print | perl -nle 'unlink;'
これは、ファイル名が見つかるごとにプロセスを起動しなく て済みますので、find
の -exec スイッチを使うよりも速く なります。
while (<>) {
... # ここでスクリプトが実行される
} continue {
print;
}
各行は、自動的に印字されることになります。
#!/usr/bin/perl -s
if ($xyz) { print "true\n"; }
#!/usr/bin/perl
eval "exec /usr/bin/perl -S $0 $*"
if $running_under_some_shell;
システムは、最初の行を無視し、スクリプトを /bin/sh に渡 し、/bin/sh は
Perl スクリプトをシェルスクリプトとして実 行しようとします。
eval '(exit $?0)' && eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
& eval 'exec /usr/bin/perl -S $0 $argv:q'
if 0;