株式会社ラクス  ITエンジニア総合支援サイト スタックアスタリスク フルマネージド専用サーバー エクスユニット
ITエンジニアとして 知る 学ぶ
 
Java
.NET
PHP
プログラミング一般
DataBase
システム/サーバ構築
システム/サーバ運用
技術系一般知識
 
 
>IT技術情報>プログラミング一般>Perl第4回:PerlTips
【連載 】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


という感じですね。

▼Java や Linux を体系的に学びましょう!▼
Stack*のラクスが、
新学習方式のカリキュラムを開発しました!
14700円から(*1)、Java や Linux を体系的に学べます!!
(*1 テキスト代のみの税込料金です)




■-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コマンドラインオプション

【 関連記事 】
【連載】Perl
第1回:Perl基本
第2回:Perl中級
第3回:Perl応用
第4回:Perlその他



サイト内全文検索
スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。


簡単レンタルメールフォーム
300メガ1000円〜 XBitのレンタルサーバー
500メガ1995円〜 電話サポート/PostgreSQL/専用SSLなどにも対応!お客様のニーズを網羅したレンタルサーバ
ホームページ制作のアシストウェブ
STACK* 執筆の講師陣から習得する!! ITエンジニアスクール アイティブースト
統合メールサポートシステム 〜MailDealer(メールディーラー)〜
システム開発,IT教育 〜株式会社アイティーブースト(ITBoost)〜
簡単 営業支援/顧客管理ツール Easy Sales
  利用規約 お問い合わせ・ご意見 スタックアスタリスクについて 運営会社について 
  レンタルサーバー ホスティング 専用サーバー メールフォーム ショッピングカート メール共有 ITエンジニア派遣 Linux講座 Java講座 メール配信 レンタルサーバー Webデータベース 検索サービス
CopyrightcRAKUS Co.,Ltd. All Rights Reserved.  メール管理・共有 顧客管理(CRM)もできるメール対応サポートシステム JAVA LINUX CISCO 技術者派遣 育成事業 株式会社ラクス