strict プラグマについて

strict プラグマについてよく分かっていないので、
自分なりにまとめながら理解しようと思う。
なお、以下の内容はstrict - 安全ではない今ストラクトを制限するPerlプラグマ
をかなり参考にしています。
(まだ書き終わってない! -> vars subs)

概要

strictプラグマには vars refs subs の3つの制約があり、
特に指定をしない場合は3つ全ての制約が受ける。

# 3つ全部
use strict; 

# 1つずつ指定する場合はこう
use strict "vars";
use strict "refs";
use strict "subs";

# はずしたりもできるみたい
use strict;
no strict "vars";

vars

ローカル変数を必ずmy()を使って宣言することと、
グローバル変数を$X::fooのように修飾することを義務付ける。
ただし、$a と $b については、sortによって使われるため特別扱い。

our と use vars がよく分からない(´・ω・`)

refs

シンボリックリファレンスを使ったときにランタイムエラーを発生させる。

シンボリックリンクリファレンス

Perlで一般的に使われているのはハードリファレンス。
シンボリックリファレンスとは、
「実行時に生成される値や変数の中の値よって、
他の変数名やサブルーチン名などを決める」というような処理のこと。

$scalar = 'symbolic_ref';
${"$scalar"}; #これは「$symbolic_ref」と言う変数名を表す。

参考: http://kabocha.org/jelfe/07/22.html

subs

$SIG{PIPE} = "Plumber"; と書くところで、
"Plumber" を Plumber と書くことを禁止する。