プログラミングPerl〈VOLUME1〉の19章からメモ。
スイッチとかフラグとかとも呼ばれるらしいけど、なぜだか"コマンドラインオプション"がしっくりくるので、そう呼んでる。
"perl -h"とか"perldoc perlrun"でもいろいろ見れるけど、英語わからん。

--
以後の引数をスイッチとしては扱わない。*1
-c
構文チェックだけを行って、実行はしない。*2
-e 'Perlのコード'
コマンドラインに直接スクリプトを書く。*3
-Iディレクト
@INCの先頭に指定したディレクトリを追加する。
-mモジュール
use モジュール ();
-Mモジュール
use モジュール;*4 *5
-n
引数に与えられたファイルを、一行づつ($_に入れて)処理する。*6
-p
引数に与えられたファイルを、一行づつ($_に入れて)処理して、出力する。*7
-i拡張子
ファイルのバックアップを作って、printの出力先を元のファイルにする。-pと一緒に使うのが普通かと。*8
-T
汚染チェックを行うようにする。*9
-w
警告を出す。
-W
全ての警告メッセージをオンにする。
-X
全ての警告メッセージをオフにする。
-x
埋め込まれているスクリプトを取り出して実行する。*10
-v
いろいろと表示する。
-V
いろいろいろと表示する。

*1:スイッチ以外のものや、"--"スイッチに出会うと、そこでスイッチの解析をやめてしまう。

*2:全てのBEGINブロック、CHECKブロック、useディレクティブが実行される。

*3:複数回可能。複数個置くときは、間の';'を忘れないように注意。1個の時は必要ないようだから、つい書き忘れる。

*4:-M-モジュール とかやると、no モジュール; を実行する。

*5:-M'module qw(foo bar)' と -Mmodule=foo,bar は同じこと。

*6:スクリプトをwhile(<>){…}で囲む感じ。

*7:スクリプトをwhile(<>){…}continue{print;}で囲む感じ。

*8:拡張子に'*'が含まれていない時は、元のファイル名に拡張子をつけたのがバックアップファイル名になる。'*'が含まれている時は、'*'を元のファイル名に置き換えたものがバックアップファイル名になる。拡張子が指定されていないと、元のファイルを上書きする。

*9:通常、setuidかsetgidで実行するときにだけ行われる。setuidとかsetgidとかって何?

*10:#!で始まり"perl"という文字列を含む行が見つかるまで、先頭のごみを読み飛ばす。__END__か__DATA__で終了させる。