Perl5 KAIN のカンベ(笑)

コマンドライン上起動書式
perl [-hv] [-V[:変数]] [-cw] [-pna] [-Fパターン] [-l[8進数]] [-0[8進数]] [-m[-]モジュール] [-i[拡張子]] [-e 'スクリプト'] [ファイル] [引数]...

Perlが起動すると,以下の順にスクリプトをさがす
1. コマンド行内の -e スイッチ
2. コマンド行内の最初のファイル名
3. 標準入力
スクリプトをコンパイルし,エラーがなければ実行。

主要スイッチ
-0<8進数> レコードセパレータ($/)。8進数を指定しないとヌル文字,該当する文字がない場合はファイル全体を読込む。
-a 自動スプリットモード。-n,-p と一緒に使う。$_ を @F にスプリットする。
-c スクリプト構文チェック。BEGIN と END ブロックのみ実行。
-e 'スクリプト' 1行スクリプト。複数の -e を使用可。引数リストからはファイルをさがさない。(DOSでは"使用?)
-F/正規表現/ スプリット区切り。正規表現で指定。/ は省略可。
-h オプションの要約を表示。
-i<拡張子> インプレイス編集。<>で処理されるファイルを拡張子つきでバックアップ。拡張子を指定しないとバックアップなし。
-l<8進数> 自動行末処理。-n,-p を使ったときに行末文字($/)を削除。print 文実行時の行末文字($\)を$/または指定文字に設定。
-m[-]モジュール モジュールの使用。スクリプト実行前にuse モジュール(またはno モジュール)を実行。
-n スクリプトを各ファイルに対して実行(while (<>){ SCRIPT } と見なす,sed -n,awk と同様)。印字を抑制。BEGIN,ENDブロック設定可。
-p スクリプトを各ファイルに対して実行し自動印字 ( while (<>){ SCRIPT; print;} と見なす?,sed と同様)。BEGIN,ENDブロック設定可。
-v perlのバージョンとパッチレベルを表示。
-V<:変数> perlの設定情報を表示。
-w スクリプトに関する各種警告を表示。
プログラムファイル 処理内容のファイル。複数可。無指定と - は標準入力。
定義済み変数
$ARG
$_
デフォルトの入力とパターン検索のスペース
$<数字> 最後のパターンマッチで,対応する括弧内にマッチした文字列
$& 最後に成功したパターンマッチでマッチした文字列
$` 最後の成功したパターンマッチでマッチした部分の前の文字列
$' 最後の成功したパターンマッチでマッチした部分に続く文字列
$+ 最後に検索されたパターンの最後の括弧にマッチした文字列。
$. 最後に読み込みを行なったファイルハンドルの現在の入力行の番号。"<>"構文では明示的にクローズを行なわないためARGV のファイルにまたがって行番号が数えられる。
$RS
$/
入力レコードセパレータ。デフォルトは改行。
$| 0 以外に設定されると,その時点の出力チャネルに write や print を行なうごとに強制的にフラッシュ。デフォルトは 0。
$, print 演算子のための出力フィールドセパレータ。
$\ print 演算子のための出力レコードセパレータ。
$" $, と同様だが,2重引用符で括られた文字列または同様に扱われる文字列の中で配列値が展開される際に適用。デフォルトはスペース。
$# 数字を印字する際の出力フォーマット。初期値は %.20g。
$! 数値コンテキストで用いられるとその時点の errno の値が (通常の注意事項とともに) 得られる。文字列コンテキストで使われると対応するシステムエラーのメッセージ文字列。
$0 実行されている Perl スクリプトのファイル名。
$ARGV <> から読込みを行なっているとき,現在のファイル名。
@ARGV
$ARGV[0],...,
$ARGV[n]
コマンドラインからスクリプトに渡す引数の配列。 @INC do EXPR,require,use によって評価する Perl スクリプトを探す場所のリストの配列。
演算子
項とリスト print sort chmod ...
アロー ->
イン(デ)クリメント ++ --
指数 **
単項 !(論理否定) -(算術否定) ~(1の補数) +(?) \(参照)
マッチング =~ (m/RE/(検索) s/RE/NEW/(置換) tr/str1/str2/(変換)) !~
加減 + -
乗除 * / %(剰余) **
文字列 .(連結) x(繰返し)
シフト << >>(整数のビットシフト)
名前付き単項
数値比較 == != < > <= >= <=> (1/0/-1を返す)
文字比較 eq ne lt gt le ge cmp (1/0/-1を返す)
ビット演算 & | ^
論理演算 && || (左側の式で結果が決まったら右側の式は実行しない)(例. print OUT || die("書込みエラー");)
範囲 ..(整数配列,ブール値)
3項演算子(条件) 式 ? 式 : 式
代入演算子 = += -= *= /= %= 他 (結果は有効な左辺値)
コンマ ,
論理(英語) not and or xor

ユーザ定義関数
入出力
入力ファイルのオープン open(IN, "-")
open(IN, "InputFile")
open(IN, ">InputFile")
open(IN, "command |")
標準入力をオープン
入力ファイル(InputFile)をオープン
コマンドの出力をパイプ入力
出力ファイルのオープン open(OUT, ">-")
open(OUT, ">OutputFile")
open(OUT, ">>OutputFile")
open(OUT)
open(0UT, "| filter")
標準出力をオープン
出力ファイル(OutputFile)をオープン
コマンドの入力としてパイプ出力
1行読込み <IN>
$Line = <IN>
<STDIN>
<>
ファイルハンドルINから読込み
標準入力から読込み
コマンドライン引数(ARGV)から読込み
1行書込み print OUT
print OUT $Line
print
print $Line
ファイルハンドルOUTに書込み
標準出力に書込み
書式指定書込み printf "書式", リスト
指定バイト読込み read(IN, 変数, バイト数, 位置) INの現在位置から指定バイト数を変数の指定位置に読み込む
アクセス位置変更 seek(ファイルハンドル, アクセス位置, フラグ,) ファイルハンドルの現在の位置をアクセス位置に変更(フラグ0:先頭から, 1:現在位置から, 2:末尾から)
ファイルをクローズ close ファイルハンドル
ファイル削除 unlink("FileName")
ファイル終りの検出 eof(IN)
eof()
eof
1文字読込み getc
getc IN
配列操作
シフト shift(@配列)
unshift
先頭要素を除去してうしろから詰める
先頭にリストを挿入
末尾要素 push
pop
置き換え splice
順序 sort
reverse
ハッシュ操作 delete 要素
each ハッシュ
keys ハッシュ
values ハッシュ
文字列関数 chop
chop 変数
chop(リスト)
index(文字列1, 文字列2[, 位置])
rindex(文字列1, 文字列2[, 位置])
length(文字列)
sprintf("書式", リスト)
substr(文字列, 位置[, バイト長])

メタ文字
\t タブ (HT,TAB)
\n 改行 (LF)
\r 復帰 (CR)
\f 改ページ (FF)
\a アラーム (BEL)
\e エスケープ (ESC)
\0oo 8 進数で表した文字
\x1b 16 進数で表した文字
\c[ コントロール文字
\l 次の文字を小文字にする
\u 次の文字を大文字にする
\L \E まで小文字にする
\U \E まで大文字にする
\E 変更の終わり
\Q \E まで正規表現のメタ文字をクォートする
\w 「単語」の構成文字 (英数字と "_")
\W 単語の構成文字以外
\s 空白文字
\S 空白文字以外
\d 数字
\D 数字以外
\b 単語の境界にマッチ
\B 単語の境界以外にマッチ
\A 文字列の最初にのみマッチ
\Z 文字列の最後にのみマッチ
\G 前回の m//g が終わったところにのみマッチ
$+ 最後の括弧対にマッチしたもの
$& マッチした文字列全体 ($0はこの意味に使えない)
$` マッチした文字列の前にあったもの
$' マッチした文字列の後にあったもの
拡張正規表現
. 改行以外の任意の1文字(/s修飾子で改行を含む任意の1文字)
.* 空列を含む任意の文字列
文字? 前に指定された文字,部分式の0回または1回のくり返し。
文字* 前に指定された文字,部分式の0回以上のくり返し
文字+ 前に指定された文字,部分式の1回以上のくり返し
{n} 前に指定された文字,部分式のn回のくり返し。
{n,} 前に指定された文字,部分式のn回以上のくり返し。
{n,m} 前に指定された文字,部分式のn回以上,m回以下のくり返し。
^文字列 文字列の先頭(/m修飾子で各行の先頭)
文字列$ 文字列の末尾(/m修飾子で各行の末尾)
^文字列$ 正規表現<RE>にマッチする文字列だけからなる行
文字列文字列 左右の文字列の連続。
文字列 | 文字列 左右の文字列どちらか。3つ以上からの選択も可。
\文字 メタ文字。\. \( \{ など特殊文字を通常文字として扱う。
\数字 <数字>番目の部分文字列。パターン外では$<数字>。
(RE) 正規表現<RE>にマッチしグループ化。合致した文字列を記憶し,正規表現中では\n,正規表現の外では$nで参照。配列コンテキストでは各部分文字列を要素とする配列。
(?<RE>) 正規表現<RE>にマッチし,同時にグループ化。合致文字列を記憶しない。
[文字列] <文字の並び>の中の1文字
[^文字列] <文字の並び>に含まれない1文字
[a-z][a-z][a-z][a-z]+ 小文字だけからなる4文字以上の英単語
& (置換文字列中でのみ使用)マッチ文字列

 正規表現によるパターンマッチのつかいどころ


$hoge=~/$bahi/;
$hoge=~m/$bahi/;
=~ か !~ で検索対象文字列を指定しない場合は $_ を対象。リスト値コンテキストでは,パターン中の括弧で括られた部分列にマッチしたもので構成されるリストを返す。
s/$bahi/$bahi$bahi/; 文字列置換。一致パターンが見つかると置換テキストで置き換えて置換した回数を返す。見つからなければ偽 (0)。文字列を指定しないと変数 $_ を検索,置換。
tr/list/list/; 検索リストに含まれる文字を対応する置換リストの文字に変換。
パターンマッチオプション
e 置換文字列を式として評価
g すべてを探し出す
i 大文字と小文字を同一視
m 文字列を複数行として扱う
o パターンのコンパイルを1度だけにする
s 文字列を単一行として扱う
x 拡張正規表現を使用
検索リスト
c 検索リストを補集合に(含まれない文字を変換)
d 見つかったが置換されなかった文字を削除。指定しない場合は置換リストの最後の文字を必要に応じて使用
s 変換後の文字が重なったときに1文字に圧縮

よくいちいちリファレンス読み返してしまうやつをまとめた。