|
|
 |
| >IT技術情報>プログラミング一般>Perl第4回:PerlTips
|
 |
 |
 |
 |
【 ページ 】 | 1
| 2
| 3
| 4
|
<<前のページへ
|
 |
4.Perlコマンドラインオプション
Perl には、何気に便利なコマンドラインオプションがたくさんあります。そのいくつかをご紹介いたします。特に
-i オプションはとても便利ですので、最低でもそこまでは読み進めていただければ幸いです。
なお、オプションの一覧は perl -h で見ることができます。ここでは、
| |
 |
perl -v
This is perl, version 5.005_03 built for i386-linux
|
 |
というバージョンの Perl について書きます。
|
 |
| ■-e オプション |
 |
-e オプションは、指定された文字列をプログラムとして実行し、すぐに
Perl を終了するオプションです。
| |
 |
perl -e 'print "hogehoge"'
|
 |
として実行すれば、画面に hogehoge が出力されます。このオプションを指定した場合は、perl
コマンドの引数としてプログラムを指定することはできません。これ単体ではあまり大した価値はないのですが、後に紹介するオプションと組み合わせて利用します。
|
 |
| ■-n オプション、-p オプション |
 |
-n オプションは、与えたプログラムの外側に下のようなループがあるのと同じような動作をします(実際に等価な処理は少し違います)。
| |
 |
while(<>) {
....
}
|
 |
「<>」は、ダイアモンド演算子と呼ばれ、「標準入力から入力が与えられた場合はそちらを読み込み、ファイル名が引数として与えられた場合はファイルから読み込む」というとても便利な演算子です。
-p オプションも同様ですが、ループブロックの内側の最後に print $_; があるように振舞います。つまり、こんな感じです(実際に等価な処理は少し違います)。
| |
 |
while(<>) {
....
print $_;
}
|
 |
例えば、
| |
 |
perl -p -e 'print ++$i, ": "' /etc/passwd
|
 |
とすれば、/etc/passwd に行番号をつけて出力することができますし、
| |
 |
perl -p -e 's/^[^:]+/\*\*\*/;' /etc/passwd
|
 |
とすれば、/etc/passwd のユーザ名を *** に置き換えて出力できます。 BEGIN
{ } と END { } で、ループ前後の処理を記述することが可能です。
| |
 |
perl -p -e 'BEGIN{ print "-- /etc/passwd --\n";} END {print "done.\n";}' /etc/passwd
|
 |
とすると、「-- /etc/passwd --\n」を print してから、/etc/passwd
を一行ずつ print し、最後に「done.\n」を print します。
| |
 |
perl -p -e 'BEGIN{$i=1;} print $i++, ": "' /etc/passwd
|
 |
という感じですね。
|
 |
| ■-l オプション |
 |
このオプションを -p や -n と同時に用いると、-p
や -n オプションのループブロック内の最初でchomp が行われます(実はもう一つ用法がありますが、割愛します)。
つまり、
| |
 |
while(<>) {
chomp($_);
....
}
|
 |
と同様です(-n と同時に用いた場合。なお、実際に等価な処理は少し違います)。
 |
| ■-i オプション |
 |
このオプションと今までご紹介したオプションを使用すると、とても便利なことができます。一番お伝えしたかったのはここになります。
例えば、HTML ファイルが 100 コあるとします。そのなかで、ある要素の color
属性値に #ffffdd という色を指定していたとします。しかし、すべてを #aaaacc
に色変更したい、といった要望があったとします。そういう場合に、すべてエディタで置換するのは大変です。そこで、
| |
 |
perl -i.bak -p -e 's/#ffffdd/#aaaacc/ig;' *.html
|
 |
とすると、オリジナルファイルが .bak という拡張子をつけてバックアップとしてコピーされ、オリジナルファイルの
#ffffdd が #aaaacc に置換されます。上記のようにワイルドカード(*)で指定すれば、100
個のファイルすべてを一気に置換することができます。便利ですよね?
なお、-i オプションの後ろの拡張子を指定しない場合は、バックアップファイルは作成されません。
|
 |
| ■-a オプション、-F オプション |
 |
-a オプションを指定すると、入力行($_)が自動的に
split され、結果が配列 @F にセットます。つまり、
| |
 |
perl -a -n -e 'print join("," , @F), "\n";' /etc/services
|
 |
は、下記と同様です。
| |
 |
while(<>) {
@F = split(' ');
print join("," , @F), "\n";
}
|
 |
| |
 |
ps axuwww | perl -n -e '@F = split(" "); print join("," , @F), "\n";'
|
 |
当然、こんな感じでの利用もできます。
-F オプションに続いて split の区切り文字を指定することもできます。
| |
 |
perl -F':' -a -n -e 'print join("," , @F), "\n";' /etc/passwd
|
 |
といった感じです。 |
 |
| ■-c オプション |
 |
| -c オプションを利用すると、Perl
プログラムを実際には実行せずに、構文チェックだけを行うことができます(BEGIN、END
ブロックと use は実行されるようです)。 |
 |
| ■-w オプション |
 |
-w オプションを利用すると、一度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。
|
|
|
 |
【 目次 】
1....ordie...って?
2.バックグラウンドで処理を実行する(fork)
3.WindowsへのPerlのインストール・開発
4.Perlコマンドラインオプション
|
 |
【 関連記事 】
|
|
 |
 |
|
|