[perldocjp-cvs 1131] CVS update: docs/perl/5.12.3

Zurück zum Archiv-Index

iwai****@users***** iwai****@users*****
2011年 2月 28日 (月) 08:32:35 JST


Index: docs/perl/5.12.3/strict.pod
diff -u /dev/null docs/perl/5.12.3/strict.pod:1.1
--- /dev/null	Mon Feb 28 08:32:35 2011
+++ docs/perl/5.12.3/strict.pod	Mon Feb 28 08:32:34 2011
@@ -0,0 +1,107 @@
+
+=encoding euc-jp
+
+=head1 NAME
+
+strict - 安全ではないコンストラクトを制限する Perl プラグマ
+
+=head1 SYNOPSIS
+
+    use strict;
+
+    use strict "vars";
+    use strict "refs";
+    use strict "subs";
+
+    use strict;
+    no strict "vars";
+
+=head1 DESCRIPTION
+
+インポートリストを与えない場合は、可能な限り全ての制約を受けます。
+(これは、最も安全な動作モードです。ただ、カジュアルプログラミング
+のためには厳しすぎます。)今のところ、"subs"、"vars"、"refs" の
+3つの制約が用意されています。
+
+=over 6
+
+=item C<strict refs>
+
+シンボリックリファレンスが使われたときにランタイムエラーになります。
+(L<perlref> を見てください。)
+
+    use strict 'refs';
+    $ref = \$foo;
+    print $$ref;	# ok
+    $ref = "foo";
+    print $$ref;	# ランタイムエラー; 普段は ok
+    $file = "STDOUT";
+    print $file "Hi!";	# エラー; note: $file の後にコンマがない。
+
+このルールには 1つの例外があります。
+
+    $bar = \&{'foo'};
+    &$bar;
+
+上記のものは許容されます。だから C<goto &$AUTOLOAD> はこの制約下でも
+動きます。
+
+
+
+=item C<strict vars>
+
+C<our> や C<use vars>、C<my()> で宣言された変数や完全に修飾された
+変数以外にアクセスしたときにコンパイル時エラーを出します。
+変数が自殺してしまう問題や微表な動的スコープの問題があるため、 local()
+変数だけでは十分ではありません。L<perlfunc/my> や L<perlfunc/local>
+を見てください。
+
+    use strict 'vars';
+    $X::foo = 1;	 # ok, 完全に修飾されています
+    my $foo = 10;	 # ok, my() 変数
+    local $foo = 9;	 # ダメ
+
+    package Cinna;
+    our $bar;			# パッケージ内で宣言された $bar
+    $bar = 'HgS';		# ok, プラグマでグローバルに宣言された
+
+local() は、完全な修飾無しにグローバルな名前を触ってしまうため
+コンパイル時エラーを出します。
+
+sort() によって使われるという理由で $a と $b はこのチェックの
+適用外という特別扱いになっています。
+
+=item C<strict subs>
+
+詩的な最適化を禁止し、サブルーチン以外の裸の識別子を使おうとしたときか、
+(コロンのない)単純な識別子や中括弧の中 C<< => >> シンボルの左側に
+無いときにコンパイル時エラーを出します。
+
+    use strict 'subs';
+    $SIG{PIPE} = Plumber;   	# ダメ
+    $SIG{PIPE} = "Plumber"; 	# 問題なし: クオートされた文字列なら常に ok
+    $SIG{PIPE} = \&Plumber; 	# 好ましい方法
+
+=back
+
+L<perlmodlib/Pragmatic Modules> を見てください。
+
+=head1 HISTORY
+
+Perl 5.6.1 での C<strict 'subs'> は、(C<< => >> の前や中括弧の中での)
+ハッシュのキーのとしてクオートすることなしに(C<Foo::Bar> のような)
+複合の識別子を使えるようにしてしまっています。このことは間違いでした。
+それは、いつでもリテラル文字列です。
+
+Perl 5.8.1 からの strict は、それらの制約事項について厳格です:
+もし、知られていない制約事項が使われるならば、strict プラグマは、
+次にある記述と共に中断するでしょう。
+
+    Unknown 'strict' tag(s) '...'
+
+バージョン 1.04 (Perl 5.10) から、大文字小文字の区別のない
+ファイルシステムでの恐ろしい "Strict" の罠 (Strict trap)
+を避けるために、strict は "strict" として使われているかを検証します。
+
+
+



perldocjp-cvs メーリングリストの案内
Zurück zum Archiv-Index