Perl のコマンド ライン オプションは、小さなタスクを効率的に実行するのに役立ちます。
この記事では、Perl コマンド ライン オプションを使用して次のタスクを実行する方法を確認します。
- ファイルの内容を編集
- ハンドル行区切り
- 構文エラーをチェック
- モジュールをロード
- ループを実行する
- Perl コードを実行する
- 入力行区切りの設定
- 入力行を分割
- など
1. Perl -i オプション:ファイルの内容を編集
ファイルを 1 つずつ開き、コンテンツを STDOUT に置き換えます。
以下に示すように、次の sample.txt ファイルを使用して内容を大文字に変換してみましょう。
$ cat sample.txt Practical Extraction Report Language $ perl -pi -e “tr/[a-z]/[A-Z]/” sample.txt $ cat sample.txt PRACTICAL EXTRACTION REPORT LANGUAGE
以下に示すように、元のファイルをバックアップすることもできます:
$ perl -pi.bak -e “tr/[a-z]/[A-Z]/” sample.txt $ cat sample.txt PRACTICAL EXTRACTION REPORT LANGUAGE $ cat sample.txt.bak Practical Extraction Report Language
Perl プログラムをデバッグするには、前に説明したように Perl デバッガーを使用します。
2. Perl -l オプション:行区切りの処理
行区切りは、8 進数値を引数として取ります。以下は、いくつかの一般的な区切り記号の例であり、8 進値です。
Character Octal Value ========= ========= new line(\n) 012 tab(\t) 011 space 040 & 046
注 :すべての文字の 8 進数値を知るには、「man ascii」コマンドを使用してください。
行区切りの使用例:
$ perl -p -l046 -e “tr/[a-z]/[A-Z]/”; bala Output : BALA&
また、追加情報として 6 つの Perl eval 関数も参照してください。
3. Perl -c オプション:構文エラーのチェック
オプション -c は、プログラムを実行せずにコンパイルして、プログラムに構文エラーがないことを確認します。
$ perl -c sample.pl
4. Perl -M オプション :モジュールのロード用
Perl -M オプションを使用すると、以下に示すように目的のモジュールをロードできます。
$ perl -MFile::Copy -e ‘move(“sample.txt”,”/tmp”);’
-m オプションもモジュールのロードを行いますが、何もインポートしません。違いは次のとおりです:
- -MFile::Copy は、"use File::Copy; 「
- -mFile::Copy は「use File::Copy()」に等しい
オプション -M については、以前の 20 のキラー Perl プログラミングのヒントでも説明しました。
5. Perl -n および -p オプション:暗黙のループ
オプション -n は、以下に示すようにコードをループ内にラップします。
while(<>) { # perl code }
次のスニペットは、これをよりよく説明しています。
while(<>) { $_ =~ tr/[a-z]/[A-Z]/; }
-n を使用すると、上記のコード スニペットを次のように書き換えることができます。
$ perl -n -e ‘tr/[a-z]/[A-Z]/;print’
オプション -p は、以下に示すようにコードをループ内にラップします。
while(<>) { # perl code print; }
次のスニペットは、これをよりよく説明しています。
while(<>) { $_ =~ tr/[a-z]/[A-Z]/; print; }
-p を使用すると、上記のコード スニペットを次のように書き換えることができます。
$ perl -p -e “tr/[a-z]/[A-Z]/”;
多くの Perl コードを開発する場合は、Perl のベスト プラクティス ブックを読む必要があります。
6. Perl -e オプション:コマンドライン自体で perl コードを実行
以下に示すように、このオプションを使用して、単純なまたは短い Perl プログラムをコマンド ライン自体に記述することができます。
$ perl -e “print \”Username : $ENV{USER}”
7. Perl -0 オプション:入力レコード区切り
オプション -0 を使用すると、以下に示すように、「入力レコード区切り文字」を改行から別のものに変更できます。
$ perl -p -0046 -e “tr/[a-z]/[A-Z]/”; bala raja& Output : BALA RAJA&
上記の例では、046 は「&」文字の 8 進数値です。そのため、&文字を受け取った後、Perl はそれをレコードの終わりと見なし、変換操作を行います。
8. Perl -a オプション:入力行を分割
区切り文字をスペースとして、$_ を @F に分割します。
次の例は、オプション -a を示しています。
$ cat emp_salary.txt bala 10000 rajesh 12300 kumar 14000 $ perl -n -l012 -a -e ‘print “$F[1]“‘ emp_salary.txt 10000 12300 14000
デフォルトでは、区切り文字としてスペースを取り、分割操作を行います。区切り文字は、以下に示すように -F オプションを使用して変更できます。
$ cat emp_salary.txt bala:10000 rajesh:12300 kumar:14000 $ perl -n -l012 -F: -a -e ‘print “$F[1]“‘ emp_salary 10000 12300 14000