strict
文法チェックを厳格にする。
具体的には、下記の3つがエラーになる。
refs: 参照が代入されていない変数に対するリファレンス参照($$演算子)
エラーになる例:
$ref = "foo";
print $$ref;
※ no strict "refs" の状態では、上記の文法でも$fooの内容がprint される。
正しい例:
$ref = \$foo;
print $$ref;
vars:my , our または use vars で宣言されていない変数へのアクセス
subs:ベアワードによるサブルーチン参照
エラーになる例:
$ref = routine;
&$ref(0);
$ref = "routine";
&$ref(0);
※no strict "subs" の状態では、上記の文法でも
sub routine(0) がコールされる。
正しい例:
$ref = \&routine;
&$ref(0);
蛇足)strict プラグマの有無に関わらず、ハッシュキーには常にベアワードが使える。
$hash{'key'} と $hash{key} は、常に同じ意味に使えるし、
%hash = ( 'key' =>
'value' ) と %hash = ( key => 'value' ) も、常に同じ意味に使える。
上記の3つのうち、一部だけを厳格にしたい場合は、use strict "subs"; とか、use strict; no strict "vars"; とかも使える。