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"; とかも使える。