I ♥ WordPress

[時間割:Perl]『ミニマルPerl』その3
2008/09/16 23:53 posted by kunkichi

月曜日は「Perl」です。今日はこれまで出てきた起動オプションをプログラムのタイプ別にまとめるところから。そのまま写しちゃうのはアレなので多少いじってみました。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 204732
一次オプションクラスタ 用途
-wl 出力 -wで警告表示はお決まりな感じ。-lで行末処理。
# perl -wl -e 'print "Hello, World."'
Hello, World.
#
-wnl 入出力 -nで入力処理のフィルタ。
# echo "Hello,World." | ¥
> perl -wnl -e 's/World/Dolly/g;print;'
Hello,Dolly.
#
-wnla フィールド処理(セパレータは空白文字) -aで空白をセパレータとしたフィールド処理を指定。
# echo "1 2 3" | ¥
> perl -wnla -e 'print $F[2];'
3
個々のフィールドは@Fに入る
-wnlaF’セパレータ文字列 フィールド処理(セパレータは任意文字) -aでフィールド処理を指定、そして-Fでセパレータ文字列を指定。awkっぽい。
# echo "1,2,3" | ¥
> perl -wnlaF',' -e 'print $F[2];'
3
レコード定義クラスタ 用途
-00 段落モード 段落ごとに番号をつけてみる。# cat sample.txt
This is paragraph1.
 
This is paragraph2.
 
This is paragraph3.
# perl -wnl -00 -e 'print "$.: $_";' sample.txt
1: This is paragraph1.
2: This is paragraph2.
3: This is paragraph3.
slapcatしたデータとかこれで処理すればよさげ。
-0777 ファイルモード ファイルごとに番号をつけてみる。# cat sample2.txt
This is paragraph4.
 
This is paragraph5.
 
This is paragraph6.
# perl -wnl -0777 -e 'print "$.: $_";' ¥
> sample.txt sample2.txt
1: This is paragraph1.
 
This is paragraph2.
 
This is paragraph3.
 
2: This is paragraph4.
 
This is paragraph5.
 
This is paragraph6.
 
スイッチクラスタ 用途
-s スイッチで引数による変数処理を追加 例えば-flagで変数$flagを有効化してみる# cat sample.pl
#!/usr/bin/perl -wl -s
 
our( $flag );
 
if( $flag ){
  print "フラグが有効化されました。";
}else{
  print "フラグは無効のままです。";
}
実行すると以下。# ./sample.pl
フラグは無効のままです。
# ./sample.pl -flag
フラグが有効化されました。
モジュールクラスタ 用途
-M’モジュール名 モジュールを有効化する。 モジュールがインストールされているかの確認に使える。# Perl -M'Net::SMTP' -e ''
#
何も出力されなければモジュールはインストールされている。エラーが出力されたら印すt−ルされていない。
プログラムクラスタ 用途
-e ‘実行するPerlのコード コマンドラインから実行したいコードを書く。

上書き編集クラスタってのもあるのだけど、これはまだ出てきていないのでスルー。

でこれらをあらかじめエイリアスとして指定しておけばちょっと便利かも。
# cat .bashrc
alias perl_o='    perl -wl           ' # 出力
alias perl_io='   perl -wnl         ' # 入出力フィルタ
alias perl_iop=' perl -wpl         ' # 入出力フィルタでprintを使う
alias perl_f='     perl -wnla       ' # フィールド処理
alias perl_fp='   perl -wpla       ' # フィールド処理でprintを使う
alias Perl_o='    perl -00 -wl     ' # 段落モードで出力
alias Perl_io='   perl -00 -wnl   ' # 段落モードで入出力フィルタ
alias Perl_iop=' perl -00 -wpl   ' # 段落モードで入出力フィルタでprintを使う
alias Perl_f='     perl -00 -wnla ' # 段落モードでフィールド処理
alias Perl_fp='   perl -00 -wpla ' # 段落モードでフィールド処理でprintを使う

でもスクリプトではこうは行かないのである程度は覚えないと行けない、ということで順序。

ワンライナーの場合

# perl [スイッチクラスタ] [レコード定義クラスタ] [一次オプションクラスタ] [プログラムクラスタ]

スクリプトの場合

#!/usr/bin/perl [スイッチクラスタ] [レコード定義クラスタ] [一次オプションクラスタ]
〜以下コード〜

基本は一次オプションクラスタがあって、それにいろいろ追加した上で、コード部分を書くって言う流れになると。

こういうオプションを駆使した使い方はあんまりやったことなかったのだけど、僕の日常の作業だとオプションを指定せずに(-wTぐらいはつけます)ベタなスクリプトを書くよりも、こっちのほうが活躍する機会は多いかも。そのうちちょっと試してみよう。

コメント&トラックバック

トラックバックURL





このページの先頭へ