perldiag - さまざまな Perl 診断メッセージ
これらのメッセージは以下のように分類されます (重要度が増す順に 並べてあります):
(W) 警告 (オプション)
(D) 非推奨 (オプション)
(S) 重大な警告 (デフォルトでは有効)
(F) 致命的エラー (トラップ可能)
(P) 起こるはずのない内部エラー (トラップ可能)
(X) 重大致命的エラー (トラップ不可能)
(A) 外部エラーメッセージ (Perl 以外で生成されたもの)
上記のうち、最初の三つ (W, D, S) に分類されるメッセージの大部分は
warings プラグマで制御できます。
メッセージが warnings プラグマで制御できる場合、
警告カテゴリは以下の説明で分類文字と共に記されています。
warnings プラグマか -w と -W のオプションを使うと追加の警告が
有効になります。
警告は、表示する変わりに警告が出るたびに呼び出されるサブルーチンへの
リファレンスを $SIG{__WARN__} にセットすることで捕捉できます。
perlvar を参照してください。
warnings プラグマか -X オプションで明示的に無効にされない限り、
厳しい警告は常に有効です。
トラップ可能なエラーは評価演算子を使ってトラップできます。
eval in perlfunc を参照してください。
ほとんど全ての場合、警告は warnings プラグマを使うことで
選択的に無効にしたり致命的エラーに昇格させたりできます。
warnings を参照してください。
メッセージは大文字小文字を無視してアルファベット順に並んでいます。 これらの中には一般的なものもあります。 変化する部分は %s またはその他の printf スタイルの表記をしています。 これらの表記や、その他の英文字以外の文字は並び順に関しては 無視されています。 メッセージを探すには、英文字以外は無視してください。
accept() on closed socket %s
(W closed) クローズされたソケットに accept を行なおうとしました。
socket() の呼び出し時に、返却値のチェックを忘れたのではありませんか。
accept in perlfunc を参照してください。
(X) MS-DOS マシンでは、64K を越えるメモリアロケートをおこなえません。
(F) pack() や unpack() での '!', '<', '>''!' の修飾子は特定のタイプの
後にのみつけることができます。
pack in perlfunc を参照してください。
(W ambiguous) 定義したサブルーチンの名前が Perl のキーワードと同じで、 どちらかを呼び出すために修飾なしで名前を使っています。 Perl は、サブルーチンがインポートされたものではないので、 組み込みのものを呼び出すことにしました。
サブルーチン呼び出しとして解釈することを強制させるためには、
サブルーチン名の前にアンパサンドをつけるか、名前をパッケージ名で
修飾してください。
他の方法として、サブルーチンをインポートする(あるいは use subs
プラグマを使ってインポートされたふりをする)方法もあります。
警告なしに Perl 演算子として解釈させるためには、(CORE::log($x) のように)
演算子に CORE:: 接頭辞をつけるか、サブルーチンをオブジェクト
メソッド(Subroutine Attributes in perlsub や attributes を
参照してください)として定義してください。
(F) tr/a-z-0// のような、何の意味もないことをしようとしました。
文字変換の文字に - を加える時は、最初か最後に置いてください。
(以前は tr/a-z-0// は tr/a-y// と同義でしたが、これはおそらく
予想していたものと違うでしょう。)
(W ambiguous)(S) 何か、あなたが考えているようには解釈できないものが ありました。 普通は、不足しているクォート、演算子、かっこ、宣言を追加することで かなり簡単にあいまいさを解消できます。
(F) VMS 特有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、STDIN がパイプで あることを発見しましたが、さらに '<' を使って STDIN をリダイレクトしようと しました。 STDIN ストリームは一つだけにしてください。 お願いします。
(F) VMS 特有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、STDOUT を ファイルと他のコマンドへのパイプと両方にリダイレクトしようとしていると 判断しました。 どちらかを選ぶ必要がありますが、以下のように出力を二つのストリームに 「分割」するプログラムや Perl スクリプトにパイプすることを止めるものは 何もありません。
open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!";
while (<STDIN>) {
print;
print OUT;
}
close OUT;
scalar(%s)
(W misc) パターンマッチ (//), 置換 (s///), 文字置換
(tr///) 演算子はスカラ値に対して動作します。
これらを配列やハッシュに適用すると、配列やハッシュをスカラ値 --
配列の長さかハッシュの大きさの情報 -- に変換し、そのスカラ値に対して
動作します。
これはおそらくしたいこととは違うでしょう。
代替案については grep in perlfunc と map in perlfunc を参照してください。
(F) setuid エミュレータでは、Perl を起動したときの引数と、
#! の行で指定された引数はマッチすることが要求されます。
#! 行の 1 引数制限があるシステムがあるので、
組み合わせスイッチを試してみてください;
例えば、-w -U を -wU にしてください。
(F) msgsnd() に渡す文字列は、少なくとも sizeof(long) の
長さが必要です。
(F) exists() の引数は以下のように、ハッシュや配列の要素か、
アンパサンド付きのサブルーチンでなければなりません:
$foo{$bar}
$ref->{"susie"}[12]
&do_something
(F) delete() の引数は以下のようにハッシュか配列の要素であるか:
$foo{$bar}
$ref->{"susie"}[12]
あるいは以下のようにハッシュか配列のスライスでなければなりません:
@foo[$bar, $baz, $xyzzy]
@{$ref->[12]}{"susie", "queue"}
(F) exists &sub の形の exists() の引数はサブルーチン呼び出しではなく、
サブルーチン名でなければなりません。
exists &sub() とするとこのエラーが生成されます。
(W numeric) ここに示した文字列は、数値が必要な演算子の引数として、 与えられました。 運がよければ、このメッセージによって、どの演算子が 問題となったかがわかります。
(W layer) Perl I/O システムに層を引数付きで追加するときに、引数リストを 閉じる ) を忘れています。 (層はデータの外部表現と内部表現の変換を扱います。) Perl はここで層のリストのパースを中止し、この層の追加は行われませんでした。 明示的に失敗する操作を要求していないのであれば、これは環境変数 PERLIO の 値が原因かもしれません。
(D deprecated) 本当に古い Perl では、場所によっては、配列名の @ を 省略できました。 この省略は、止めてください。
(P) Perl に付属の malloc ルーティンが内部エラーを起こしました。
(P) 一般的なアサーションが失敗しました。 問題の file を調べる必要があります。
(F) 条件演算子へ代入を行なう場合には、2 つめの引数と、3 つめの引数は、 ともにスカラか、ともにリストでなければなりません。 そうでないと、Perl は右辺のコンテキストを決めることができません。
(W threads)(S) スレッドが有効な Perl を使っているときに、他のスレッドが まだ動いている状態で、あるスレッド(メインスレッドには限りません)が 終了しました。 普通は、作成したスレッドに join することで返り値を集めて、それから メインスレッドから終了するのがよい考えです。 threads を参照してください。
(F) 制限ハッシュで許されているキーの集合に含まれていないキーに対して 取得または設定しようとして失敗しました。
(F) bless() 演算子の CLASSNAME 引数は結果のオブジェクトに bless する
パッケージ名を想定しています。
そこに何かへのリファレンスが与えられました。
おそらく以下のようにしたのでしょう:
bless $self, $proto;
以下を意図していたはずです:
bless $self, ref($proto) || $proto;
実際に与えられたリファレンスを文字列化したものに bless したい場合は、 以下のようにして自分で文字列化する必要があります:
bless $self, "$proto";
(F) 制限ハッシュで、キー集合に含まれていないキーから削除しようとしました。
(F) 制限ハッシュで、読み込み専用として宣言されている値のキーを 削除しようとしました。
(P internal) すべての SV オブジェクトは、exit 時にガーベジコレクションが 行なわれるアリーナに割り当てるようになっています。 ある SV が、そういったアリーナに入っていないことが、見つかりました。
(P internal) Perl はストレージおよびハッシュキーとその他の 文字列へのアクセスを最適化するために、文字列の参照数テーブルを 管理しています。 これは誰かがもうテーブルにない文字列の参照カウントを減らそうと したことを示します。
(W debugging) 消滅する値は、free_tmps() ルーティンで解放されるように なっています。 このメッセージは、free_tmps() ルーティンの前に何ものかが、SV を 解放しようとしていることを示していて、これは、free_tmps() が 解放しようとしたときには、どこからも参照されていないスカラを 解放することになるということです。
(P internal) シンボルのエイリアスについて、参照カウントの値がおかしな 状態になりました。
(W) Perl がスカラの参照カウントをデクリメントしようとして、0 に なるかを見たところ、既に 0 になっていることがわかりました。 これは、既に解放されているべきものであり、実際は、おそらく、 解放されたものでしょう。 これは、SvREFCNT_dec() が必要以上に呼ばれたか、SvREFCNT_inc() が必要な ときに呼ばれなかったか、SV が消滅すべきで無いときに消滅してしまったか、 メモリ異常になったことが考えられます。
(F) スレッドをそれ自身の中から join しようとしました。
これは不可能な動作です。
間違ったスレッドに join しようとしているか、
あるいは join() を他のスレッドに移動させる必要があります。
(W pack) (関数の結果や計算された式といった)一時的な値を pack() の
"p" テンプレートに渡そうとしました。
これは、たとえ現在の文の終了前でも、不正な値となり得ます。
この警告を避けるためには、pack テンプレート "p" の引数として、
リテラルかグローバルな値を使ってください。
(F) 既に一度コンパイルに失敗しているファイルを use や require で
読み込もうとしました。
Perl は %INC からこのファイルのエントリを削除するまで再びファイルを
コンパイルしようとはしません。
require in perlfunc と %INC in perlvar を参照してください。
(W) 既に解放された配列の長さを設定しようとしました。 配列の最後のインデックスを表現するスカラをリファレンスに保存して、 後でこのリファレンスを通して代入することでこれを行えます。 例えば:
$r = do {my @a; \$#a};
$$r = 503
(W substr) 左辺値として使われる substr() の 1 番目の引数としてリファレンスを
渡しました; これはやや奇妙なことです。
おそらくはまずデリファレンスするのを忘れたのでしょう。
substr in perlfunc を参照してください。
(F) msgctl()、semctl()、shmctl() のいずれかに、間違ったサイズのバッファを 渡してしまいました。 C の言い方で書くと、正しいサイズはそれぞれ、sizeof(struct msqid_ds *)、 sizeof(struct semid_ds *)、sizeof(struct shmid_ds *) です。
(F)置換のための置き換え文字列を評価するために /e オプションを指定して
いますが、評価するコードに文法エラーがありました;
最もありそうなことは、予期しない位置に右中かっこ '}' があったことです。
(F) ファイルハンドルが必要なものに、シンボルを渡しましたが、
そのシンボルは、それに伴うファイルハンドルがありません。
おそらく、open() を忘れたか、別のパッケージで open() したかでしょう。
free() ignored
(S malloc) まず、malloc() されていないものに対して、内部ルーティンが
free() を呼びました。
強制ですが、環境変数 PERL_BADFREE を 0 にすることで無効化できます。
このメッセージ は、AIX や OS/2 のような、「ハード」動的リンクを
行うシステムで DB_File を使うとしばしば表示されます。
これは DB がシステムの malloc() を許していることに気が付かない
Berkeley DB のバグです。
(P) 内部ハッシュルーティンで、ヌル HV ポインタを渡されたものがありました。
(A) スクリプトを perl ではなく csh で実行しようとしました。 #! 行をチェックするか、スクリプトを直接 Perl で起動してください。
(F) パッケージプレフィクスでシンボル名を書き始めましたが、 そのシンボルが終了しませんでした。 特に、クォートの外で、変数展開はできませんから、
$var = 'myvar';
$sym = mypack::$var;
は、以下と同じではありません。
$var = 'myvar';
$sym = "mypack::$var";
realloc() ignored
(S malloc) 内部ルーチンが、最初に malloc() されていない何かに対して
realloc() を呼び出しました。
必須ですが、環境変数 PERL_BADFREE に 1 をセットすることで無効化できます。
(P) シンボルテーブルエントリではないものに、配列エントリを登録するような 内部要求があがりました。
(P) シンボルテーブルエントリではないものに、ディレクトリハンドルエントリを 登録するような内部要求があがりました。
(P) シンボルテーブルエントリではないものに、ファイルハンドルエントリを 登録するような内部要求があがりました。
(P) シンボルテーブルエントリではないものに、ハッシュエントリを 登録するような内部要求があがった。
(W bareword) コンパイラが、条件が想定される位置に裸の単語を発見しました。 これはしばしば、|| や && が直前の構造の最後の引数の一部として パースされたことを意味します; 例えば:
open FOO || die;
これはまた、裸の単語として解釈されるような定数をタイプミスしたことを 示している場合もあります:
use constant TYPO => 1;
if (TYOP) { print "foo" }
strict プラグマはこのようなエラーを防ぐのに便利です。
"strict subs" が有効の場合、裸の単語はサブルーチンの識別子、 中かっこの中、シンボル "=>" の左側でのみ許されます。 おそらくサブルーチンを先行宣言する必要があるのでは?
(W bareword) Foo:: の形で修飾された裸の単語が使われていますが、
コンパイラはこの場所以外でこの名前空間が使われている場所を
発見できませんでした。
おそらくパッケージを専攻宣言する必要があるのでは?
(F) BEGIN サブルーティンの実行中にトラップ不可能な例外が発生しました。 コンパイルは即座に停止し、インタプリタは中止します。
(F) Perl は既にコンパイルエラーが発生した後に BEGIN {} サブルーチン
(または use 指示子(これは BEGIN {} を暗示します))を
発見しました。
BEGIN {} が意図した環境は(エラーのために)保証されず、
引き続くコードは正しい処理に依存していると考えられるので、
Perl は単に諦めました。
(W syntax) パターンの外では、後方参照は変数の形で存在します。 後方参照の利用は、置換の右側の部分で扱われますが、スタイル的には、 他の Perl プログラマが期待し、9 個以上の後方参照があるときにも うまく動作する、変数形式を使う方が良いでしょう。
(W portable) 指定された 2 進数が 2**32-1 (4294967295) を越えるので、 システム間での移植性がありません。 移植性に関するさらなる考察については perlport を参照してください。
bind() on closed socket %s
(W closed) クローズされたソケットに bind を行なおうとしました。
socket() の呼び出し時に、返却値のチェックを忘れたのではありませんか。
bind in perlfunc を参照してください。
binmode() on closed filehandle %s
(W unopened) 開いていないファイルハンドルに binmode() を使おうとしました。
制御フローと引数の数をチェックしてください。
(W portable) 32 を越えるサイズのビットベクタは移植性がありません。
(P) コピーできない内部の値をコピーしようとしました。
(W) VMS 特有の警告です。 Perl が %ENV を反復する準備中、長すぎる論理名かシンボル定義に 遭遇したので、文字列は表示したように切り詰められました。
(F) 外部パッケージから call_sv() で起動されたサブルーティンが exit を
呼んで終了しました。
(W prototype) 以前にパーサが宣言または定義されているのを見た、 プロトタイプ付きの関数を呼び出しましたが、Perl は呼び出しがプロトタイプに 従っているかどうかをチェックできませんでした。 問題になっているサブルーチンのプロトタイプ宣言を最初の方に追加するか、 適切なプロトタイプチェックを行うためにサブルーチン定義を呼び出しの前に 移動させる必要があります。 または、関数を正しく呼び出していることが確かな場合は、名前の前に アンパサンドを付けることで警告を回避できます。 perlsub を参照してください。
(F) pack("w",...) の引数が、圧縮するには大きすぎます。 BER 圧縮整数フォーマットは正の整数のみ扱えますが、無限やとても大きい数 (> 1e308) を圧縮しようとしました。 pack in perlfunc を参照してください。
(F) pack("w",...) の引数が負数です。 BER 圧縮整数フォーマットは正の整数のみ扱えます。 pack in perlfunc を参照してください。
(F) あなたは Perl のシンボルテーブルを直接操作して、リファレンスをその中に 補完し、それからそのシンボルを伝統的な Perl の文法のよって アクセスしようとしました。 このアクセスによって、Perl はこの型グロブを自動有効化しますが、 リファレンス型から型グロブへの正当な変換方法はありません。
(P) Perl が、直接代入できない内部型に値をコピーしようとする試みを 検出しました。
(F) pack("w",...) の引数が整数ではありません。 BER 圧縮整数フォーマットは正の整数のみ扱えますが、何か他のものを 圧縮しようとしました。 pack in perlfunc を参照してください。
(F) ハードリファレンスのみが bless できます。 これによって、Perl はオブジェクトのカプセル化を「強制」します。 perlobj を参照してください。
(F) break を呼び出しましたが、given ブロックではなく foreach
ブロック内でした。
おそらく next や last を使いたかったのでしょう。
(F) break を呼び出しましたが、given ブロックの内側ではありません。
(F) 正しくメソッドを呼び出し、それは、クラスとして機能するパッケージを 正しく示していますが、そのパッケージには、何も定義されておらず、 メソッドだけになっています。 perlobj を参照してください。
(F) メソッド呼び出しの文法が使われていますが、 オブジェクトリファレンスかパッケージ名であるべきところが未定義値です。 以下のように書くとエラーが再現します:
$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
(F) メソッド呼び出しは、自分が呼び出されたパッケージがどれであるかを 知る必要があります。 普通は、渡したオブジェクトリファレンスから その情報を受け取りますが、この場合にはオブジェクトリファレンスが 渡されませんでした。 リファレンスは、bless されて始めて、オブジェクトリファレンスとなります。 perlobj を参照してください。
(F) メソッド呼び出しの構文を用いましたが、オブジェクトリファレンス、 もしくはパッケージ名が書かれるべき場所に、オブジェクトリファレンスも パッケージ名も返さない定義された式が書かれています。 (おそらく、何も書いてないかもしれません。) 以下のようなものは、エラーとなります:
$BADREF = 42;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
(F) perl -x/foo/bar のようにして起動したましたが、
/foo/bar にchdir することができません。
おそらく、存在しないのではないでしょうか。
(P) なぜかスクリプトが nosuid かどうかをファイルシステムから 調べることができません。
(F) ハッシュが想定される場所で配列を使っていますが、 この配列にはキーから添え字に変換するための情報がありません。 このようなことは添え字 0 にハッシュリファレンスがある配列でのみ可能です。
(F) ある種の SV、特に本物のシンボルテーブルエントリ (型グロブ) は、 1 つの型に留めておくことができません。 したがって、以下のようにすることはできません:
*foo += 1;
以下のようにはできますが:
$foo = *foo;
$foo += 1;
$foo にはもはやグロブは残っていません。
(F) ある種の SV、特に本物のシンボルテーブルエントリ (型グロブ) は、 1 つの型に留めておくことができません。
(F) ある種の SV、特に本物のシンボルテーブルエントリ (型グロブ) は、 1 つの型に留めておくことができません。
(F) continue を呼び出しましたが、when か default のブロックの
内側ではありません。
(F) VMS 特有のエラーです。 プロセスはクォータを使い切ったか、その他の設備問題の影響を受けました。
(F) 現在のところ、スカラ変数のみが "my", "our", "state" 定義の中で特定の クラス修飾子と共に定義できます。 この動作は将来には他の種類の変数に拡張されるでしょう。
(F) スカラ変数、配列変数、ハッシュ変数だけが、"my", "our", "state" 変数として 宣言できます。 これらは、名前として通常の識別子を持たなければなりません。
(S inplace) /dev や FIFO のような、特殊ファイルに対して、-i スイッチを 使おうとしました。 そのファイルは、無視されました。
(S inplace) 表示された理由により、新しいファイルの生成に失敗しました。
(F) 削除した (が、まだオープンされている) ファイルを読もうとすると
おかしくなる MS-DOS のようなシステムで実行しています。
-i.bak のようにバックアップを指定してください。
(S inplace) ファイルシステムが 14 文字より長いファイル名に対応しておらず、 Perl は -i オプションによるその場編集の間のユニークなファイル名の 作成ができませんでした。 このファイルは無視されます。
(F) 最小値は最大値以下でなければなりません。 もし、本当に正規表現が 0 回繰り返したものにマッチさせたいなら、単に {0} としてください。 <-- HERE で正規表現のどこに問題が発見されたかを示しています。 perlre を参照してください。
(P) suidperl の setuid エミュレータで何らかの理由により、
setegid() 呼び出しが失敗しました。
(P) suidperl の setuid エミュレータが何らかの理由によって失敗しました。
(F) このエラーは、通常、普通の perl が setuid エミュレーションのために suidperl を実行しようとしましたが、実行できなかったことを意味します。 特に UNIX マシンの /usr/local/bin などでは、perl の実行ファイルが、 perl5.000 という名前のときには、同じディレクトリで sperl5.000 という形式の 名前を探します。 もし、ファイルが存在していれば、実行パーミッションをチェックしてください。 許可されていないようであれば、システム管理者の方に、わけを 尋ねてみてください。
(F) このマシンには、waitpid() も wait4() もありませんので、
フラグの無い waitpid() のみがエミュレート可能です。
(F) #! 行にその時点で意味をなさないスイッチが指定されました。 たとえば、#! 行に -x をおいても意味がありません。
(F) プラットフォームのバイト順序がビッグエンディアンでも リトルエンディアンでもないか、ポインタサイズがとても変わっています。 ビッグエンディアンやリトルエンディアンの不動小数点数やポインタの pack や unpack はできません。 pack in perlfunc を参照してください。
(W exec) 提示した理由によって、system() や exec() やパイプオープン
呼び出しの指定されたプログラムが実行できませんでした。
考えられる理由には: ファイルのパーミッションが間違っている、
ファイルが $ENV{PATH} の中にない、問題の実行ファイルが
このマシン用ではない、スクリプトの #! 行が同じような理由で実行できない
インタプリタを指している、というようなものがあります。
(あるいは、このシステムで、#! がサポートされていません。)
(F) #! 行に書かれた内容にしたがって、Perl は示されたプログラムを 実行しようとしました。 そうしたくないのであれば、#! 行のどこかに、"perl" と書いておいてください。
(F) -S スイッチを使いましたが、PATH に見つかった実行するスクリプトが 正しいパーミッションではありませんでした。
(F) CORE::word の形の文字列が prototype() に与えられましたが、
名前 word は組み込みではありません。
(F) \p{} か \P{} を使っていますが、そのような名前の文字プロパティは
見つかりませんでした。
おそらくプロパティ名をタイプミスした(文字プロパティ名は英数字だけから
構成されていることを忘れないでください)か、Is か In の接頭辞を
忘れたのでしょう。
(F) どこにも見つからないラベルへ goto を行なおうとしました。 goto in perlfunc を参照してください。
-S オプションを使いましたが、実行するスクリプトは PATH に 見つかりませんでした。
(F) -S オプションが使われましたが、 PATH に実行するスクリプトが 見つかりません。あるいは少なくとも適切なパーミッションがありません。 スクリプトはカレントディレクトリにはありますが、PATH に カレントディレクトリは含まれていません。
(F) Perl の文字列は、複数行に渡ることができます。このメッセージは、 文字列を終わる区切り文字が見つからなかったことを意味します。 括弧類の区切り文字では、ネストを数えるので、以下では、最後の括弧が 無いと言われます:
print q(The character '(' starts a side comment.);
このエラーがヒアドキュメントで起きた場合、閉じタグの前か後に 見えない空白を含んでいるかもしれません。 よいプログラマ用エディタには、このような文字を探す助けになる方法が あります。
(F) (例えば \p{Lu} が全て大文字、のように) Unicode プロパティを意味する
\p を使おうとしました。
Unicode プロパティを使いたい場合は、既知のプロパティの一覧について
perlunicode を参照してください。
Unicode プロパティを使うつもりでない場合は、\\p (単に \p) または
\Q\p (\E までの残りの文字列) を使って \p を
エスケープしてください。
(F) パイプラインをオープンしようとして、fork を行なおうとして、 致命的エラーが発生しました。
(S) VMS 特有の警告です。
これは VMS と、Perl が仮定している Unix モデルでは、アクセスチェックに違いが
あることによって起こります。
VMS では、アクセスチェックは stat バッファのビットではなくファイル名によって
行われるので、ACL やその他の保護が考慮されます。
残念ながら、Perl は stat バッファに全ての必要な情報が含まれていると仮定して、
アクセスチェックルーチンにはファイルスペックではなくこれを渡します。
stat バッファにあるデバイス名と FID を使ってファイルスペックを
取得しようとしますが、これは引き続いて CRTL stat() ルーチンを呼び出さない
場合にのみ動作します; なぜならデバイス名は呼出し毎に上書きされるからです。
この警告が出ると、名前の検索が失敗し、アクセスチェックルーチンは諦めて、
安全のためだけに FALSE を返します。
(注意: アクセスチェックルーチンは Perl の stat 演算子とファイル
テストについて知っているので、Perl コマンドの結果としてこの警告を見ることは
ないはずです; これは内部コートが stat バッファを軽率に扱った場合にのみ
発生します。)
(F) VMS 特有のエラーです。 パイプとして働くメールボックスの作成後、後で使うための名前を Perl が取得できませんでした。
(F) VMS 特有のエラーです。 メールボックスバッファをどれくらいとるべきかを $GETSYI に 問い合わせましたが、答えが得られませんでした。
(F) "goto" 文で foreach ループの中に飛び込もうとしました。 ここからそこへは行けません。 goto in perlfunc を参照してください。
(F) "goto" 文でブロックのように見えるけれども、適切な
ブロックではないところから飛び出そうとしました。
これは普通 sort() ブロックやサブルーチンから飛び出そうとしたときに
起きますが、それはできません。
goto in perlfunc を参照してください。
(F) "goto subroutine" 呼び出しは、sort() のための比較サブルーチンや、
(List::Util の reduce() 関数のような) 似たようなコールバックから
飛び出すことはできません。
(F) "goto subroutine" 呼び出しは eval "string" やブロックから 飛び出すことはできません。
(F) 結構マジカルな "goto subroutine" の呼び出しは、あるサブルーティン 呼び出しを別のもので置き換えるだけです。 反物の状態から作り上げることはできません。 一般に、これを行なうのは、AUTOLOAD ルーティンから抜け出すときだけに しておくべきです。 goto in perlfunc の項を参照してください。
(W signal) Perl は、SIGCHLD (SIGCLD としても知られます) シグナルが 無効化された状態で実行されていることを検出しました。 このシグナルが無効化されると子プロセスの終了ステータスを適切に 決定できなくなるので、Perl はシグナルをデフォルト値にリセットしました。 この状況は典型的には Perl が動作している親プログラム(cron など)が とても不注意であることを示しています。
(F) 現在のブロックから脱出するために、"last" 文を実行しましたが、
残念なことにブロックの中ではありませんでした。
"if" や "else" のブロックは、sort(), map(), grep() のブロックが違うのと
同様「ループ風」ブロックではないので、注意してください。
ただし、中括弧を二重にすれば、内側の中括弧が、1 度だけループするブロックと
みなされますから、同じ効果が得られます。
last in perlfunc を参照してください。
(F) Perl はパッケージのメソッド解決順序 (MRO) を計算しようとしましたが、 パッケージ stash に名前がないので失敗しました。
(F) 読み込もうとしたモジュールは、動的拡張モジュールの読み込みに 失敗しました。 これは古い動的拡張モジュールと互換性のない perl にアップグレードしたか (これは perl のメジャーバージョン間で起きることが知られています)、 (よりあり得るのは)動的拡張モジュールがシステムにインストールされている古い バージョンのライブラリに対してビルドされているかです。 古い動的拡張モジュールをリビルドする必要があるでしょう。
(F) 以前に "my" や "state" を使ってレキシカル変数として宣言された変数名に 対して local を使いました。 これは認められていません。 同じ名前のパッケージ変数をローカル化したい場合は、 パッケージ名で修飾してください。
(F) local $$ref のようなことをしましたが、Perl は現在のところこれを
扱えません; なぜなら、local() のスコープが終了した後、$ref が
指しているものの古い値を戻すとき、$ref がまだリファレンスかどうかが
わからないからです。
(F) ファイルを do (または、require、use) するように
指示されましたが、見つかりませんでした。
Perl は、フルパスで指定されていない場合ファイルを @INC で示される
全ての場所を検索します。
おそらく、追加ライブラリの場所を示すために、
PERL5LIB または PERL5OPT の環境変数を指定する必要があるか、
スクリプトの中で @INC にライブラリ名を追加する必要があります。
ファイル名のスペルミスの可能性もあります。
require in perlfunc と lib を参照してください。
(F) 関数(またはメソッド)がオートロードを許可しているパッケージで
呼び出されましたが、オートロードする関数がありませんでした。
最も可能性のある原因は関数/メソッド名の誤記か、make install と
することによるファイルの AutoSplit の失敗です。
(F) 読み込まれたモジュールは foo.so や bar.dll のような外部
ライブラリを読み込もうとしましたが、DynaLoader モジュールは、この
ライブラリの位置がわかりませんでした。
DynaLoader を参照してください。
(F) 正しくメソッドを呼び出し、それは、クラスとして機能するパッケージを 正しく示していますが、そのパッケージにも、基底クラスにも、 該当のメソッドが定義されていません。 perlobj を参照してください。
(W syntax) 配列 @ISA に別のパッケージ名が記されていますが、 存在していないようです。
(W syntax) @ISA 継承によって 2 番目の親(間接的かもしれません)として
名付けられている、1 番目のパッケージを定義(または require/use)
していません。
Perl はこれを、未定義のパッケージが空の @ISA を持っているものとして
扱います。
(F) 例えば、open(FH, ">:nosuchlayer", "somefile") のように、
open() で 存在しない PerlIO 層を使おうとしました。
(F) %ENV へのリスト代入はいくつかのシステム、特に VMS では 対応していません。
(F) 指定されたものは、代入、インクリメントなど、変更が許されていません。
(P) substr() への代入を行なう内部ルーティンに NULL が渡されました。
(F) 左辺値コンテキストとして使うサブルーチンは、そのように 宣言しなければなりません; Lvalue subroutines in perlsub を参照してください。
(F) msgrcv で使用する変数は、受信バッファとして使用しますので、 変更可能なものでなければなりません。
(F) 現在のブロックの繰り返しを進めるために、"next" 文を実行しましたが、
ブロックの中ではありませんでした。
"if" や "else" のブロックは、sort(), map(), grep() のブロックが違うのと
同様「ループ風」ブロックではないので、注意してください。
ただし、中括弧を二重にすれば、内側の中括弧が、1 度だけループするブロックと
みなされますから、同じ効果が得られます。
next in perlfunc を参照してください。
(S inplace) <> ファイルハンドルによる暗黙的なファイルオープンまたは
-n か -p コマンドラインスイッチによる暗黙的な、あるいは
明示的なファイルオープンが表示した理由によって失敗しました。
通常、これはコマンドラインで指定したファイルの読み込み権限が無いときに起こります。
(W io) 3 引数の open() の構文を使ってスカラリファレンスを読み込みまたは
書き込みのために開こうとしました:
open FH, '>', $ref;
しかしこのバージョンの perl は perlio なしでコンパイルされていて、 この形式の open は対応していません。
(W pipe) サポートされていない open(CMD, "|cmd|") を行なおうとしました。
これを行なうためには、Perl ライブラリの IPC::Open2 のようないくつかの
モジュールを使うことができます。
別の方法として、パイプされたものを ">" を使っていったんファイルに出力し、
あとで別のファイルハンドルで読み込みを行なうことも考えられます。
(F) VMSに固有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、 コマンドラインで書き込みのために '2>' や '2>>' の後に指定された ファイルを開けませんでした。
(F) VMSに固有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、 コマンドラインで読み込みのために '<' の後に指定された ファイルを開けませんでした。
(F) VMSに固有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、 コマンドラインで書き込みのために '>' や '>>' の後に指定された ファイルを開けませんでした。
(P) VMSに固有のエラーです。 Perl は独自にコマンドラインのリダイレクトを扱っていて、 標準出力としてデータを送るパイプを開けませんでした。
(F) 指定したスクリプトが、表示した理由によってオープンできませんでした。
#! を使うスクリプトをデバッグしていて、普通はシェルの $PATH 検索に
頼っている場合は、-S オプションを付けることで perl が検索するようになり、
パスや `which $scriptname` をタイプする必要がなくなります。
(S) VMSに固有の警告です。 Perl は %ENV の要素を CRTL の内部環境配列から読み込もうとしましたが、 配列がないことを発見しました。 CRTL が環境をどこに間違えて置いたかを探し出すか、PERL_ENV_TABLE を 定義して(perlvms を参照してください)環境を検索しないようにする 必要があります。
(F) 現在のブロックの繰り返しをもう一度行なうために、
"redo" 文を実行しましたが、ブロックの中ではありませんでした。
"if" や "else" のブロックは、sort(), map(), grep() のブロックが違うのと
同様「ループ風」ブロックではないので、注意してください。
ただし、中括弧を二重にすれば、内側の中括弧が、1 度だけループする
ブロックとみなされますから、同じ効果が得られます。
redo in perlfunc を参照してください。
(S inplace) バックアップを作成せずにその場編集することを要求しました。 Perl は変更したファイルで置き換えるために元のファイルを削除することが できませんでした。 ファイルは変更されずに残されます。
(S inplace) -i スイッチで行なわれた rename が何らかの理由によって、 うまく行きませんでした。 ディレクトリに書き込み権がないことも考えられます。
(P) VMS に固有のエラーです。 Perl は標準入力がパイプであると考えて、バイナリデータを受け入れるために 再オープンしようとしました。 悲しいかな、それは失敗しました。
(F|P) (サブルーチンのリファレンスではなく)メソッド名で指定された
オーバーロードの解決でのエラー: そのようなメソッドはパッケージ経由で
呼び出せません。
もしメソッド名が ??? なら、内部エラーです。
(P) suidperl の setuid エミュレータで何らかの理由により、
setreuid() 呼び出しが失敗しました。
(F) Perl が、左辺値として使われるサブルーチンから(一時的や 読み込み専用のような)不正な左辺値が返されようとしているのを 検出しました。 これはできません。
(F) return 文が、return で抜けるべきサブルーティンがない、 "main" コードで実行されました。 perlsub を参照してください。
(F) 左辺値サブルーチンから配列やハッシュ全体を返そうとしましたが、 一つだけの値を返そうとしていると Perl が考えるような方法でサブルーチンを 呼び出しました。 おそらく、Perl にこの呼び出しがリストコンテキストであると伝えるために、 サブルーチン呼び出しの周りにかっこを書いているのでしょう。
(P) 何らかの理由で、例え既にオープンしていたとしても、fstat() が 行なえません。困ったもんだ。
(P) suidperl の setuid エミュレータで何らかの理由により、
setreuid() 呼び出しが失敗しました。
(F) 実数に対しては、負数や 0 に対する対数を取ることはできません。 しかし、もし本当に負数に対してそのようなことをしたいのなら、 Perl 標準になっている Math::Complex パッケージがあります。
(F) 通常の実数では、負数の平方根をとることはできません。 しかし、本当にその計算を行ないたいのであれば、Math::Complex パッケージが Perl に標準で用意されています。
(F) 実行中のルーティンを未定義にすることはできません。 しかし、実行中に再定義することはでき、古いルーティンを実行中に、 再定義したサブルーティンを undef することさえできます。 驚きです。
(F) Perl のメインスタックのように、unshift することのできない 「実在しない」配列に対して、unshift を行なおうとしました。
(P) 内部の sv_upgrade ルーティンは、SV に「メンバ」を加えて、 より特別な種類の SV にします。 しかし、上位のいくつかの SV 型は、 特殊化され過ぎて、内部変換することができません。 このメッセージは、そのような変更を行なおうとしたことを示しています。
(F) メソッド検索を行う内部ルーチンが、名前のないシンボルテーブルを
扱いました。
シンボルテーブルは、例えば undef %Some::Package:: のように未定義の
stash によって無名となります。
(F) ハードリファレンスやシンボリックリファレンスとして使用する値は、 定義済みの値でなければなりません。 潜伏中のエラーを引きずり出す助けとなります。
(F) "strict refs" では、ハードリファレンスだけが許されます。 シンボリックリファレンスは、許されていません。 perlref を参照してください。
(F) 最初に %! ハッシュが使われるときに、
perl は自動的に Errno.pm モジュールを読み込みます。
Errno モジュールは $! errno 値のシンボリック名を提供するために
%! ハッシュと tie されることになります。
(F) 一つの型を同時にビッグエンディアンとリトルエンディアンの両方に 強制することはできないので、この修飾子の組み合わせは許可されません。 pack in perlfunc を参照してください。
(F) 単純スカラ変数だけが、foreach のループ変数として 使用することができます。
(F) マジカル変数を、字句スコープ変数として宣言しようとしました。 これが許されていないのは、マジカル変数は(グローバル変数という名前の) 1 か所だけに結び付けられているので、マジカル変数のように見えるけれども そうではない変数がプログラム中にあると、著しく混乱させるからです。
(F) 既にバイト順修飾子が付けられているグループの内側で異なったバイト順を 強制しようとしました。 例えば、ビッグエンディアングループの中にある型をリトルエンディアンに 強制することはできません。
(F) グローバル変数 $a と $b はソート比較のために予約されています。 $a か $b を <=> か cmp 演算子と同じ行に記述しましたが、その変数は その前にレキシカル変数として宣言されています。 ソート変数をパッケージ名で修飾するか、レキシカル変数の名前を 変更してください。
(F) リファレンス型を混同しています。 必要な型のリファレンスを被参照しなければなりません。 必要ならば、リファレンスの型を調べるのに、ref() 関数を使うことができます。
(F) "strict refs" によって、ハードリファレンスのみが許可されます。 シンボリックリファレンスは許可されません。 perlref を参照してください。
(F) コンパイラが大かっこで囲われた式を添字として解釈しようとしました。 しかし、大かっこの左側はハッシュか配列のリファレンスやその他の 添字化できるもののようには見えない式です。
(W syntax) 通常の式では、バックスラッシュは引数へのリファレンスを作る 単項演算子です。 マッチした部分文字列への後方参照を示すためのバックスラッシュの使用は 正規表現パターンの一部の場合にのみ有効です。 通常の Perl コードの中でこれをしようとすると、SCALAR(0xdecaf) のように 表示される値を生成します。 代わりに $1 の形を使ってください。
(F) foreach ブロックや given ブロックの内側以外で when() ブロックを
使いました。
(このエラーは when ブロックから終了したときに発生するので、マッチングに
失敗したときや、明示的な continue を使った場合はこのエラーは
発生しません。)
(F) リファレンスではない何かを弱めようとしました。 リファレンスだけが弱めることができます。
(F) 定数値 (未定義値であることが多い) を、自らを書き換えることを意味する、 代入演算子で繰り返しを行なおうとしました。 テンポラリ変数に値を移してから、繰り返すと良いでしょう。
(W pack) 以下のように書きましたが:
pack("C", $x)
$x は 0 より小さいか 255 より大きいです; "C" フォーマットは
ネイティブ OS 文字 (ASCII, EBCDIC など) のエンコーディングだけに
対応していて、Unicode 文字は対応していません;
それで、Perl は以下のように意味しているかのように振舞います:
pack("C", $x & 255)
Unicode コードポイントを pack したい場合は、代わりに "U" フォーマットを
使ってください。
(W pack) 以下のように:
pack("U0W", $x)
$x が 0 より小さいか 255 より大きいときに書きました。
しかし、U0-モードは全ての値が [0, 255] の範囲にあることを想定してるので、
Perl は以下のように振る舞います:
pack("U0W", $x & 255)
(W pack) 以下のように書きましたが:
pack("c", $x)
$x は -128 より小さいか 127 より大きいです; "c" フォーマットは
ネイティブ OS 文字 (ASCII, EBCDIC など) のエンコーディングだけに
対応していて、Unicode 文字は対応していません;
それで、Perl は以下のように意味しているかのように振舞います:
pack("c", $x & 255);
Unicode コードポイントを pack したい場合は、代わりに "U" フォーマットを
使ってください。
(W unpack) 以下のようなことをしましたが:
unpack("H", "\x{2a1}")
ここでフォーマットはバイト(値が 256 より小さい文字)を想定していますが、 文字の中により大きな値のものがあります。 Perl は、あなたが以下のようにしたかのように、256 で割った余りを文字の 値として使います:
unpack("H", "\x{a1}")
(W pack) 以下のようなことをしましたが:
pack("u", "\x{1f3}b")
ここでフォーマットはバイト(値が 256 より小さい文字)列を想定していますが、 文字の中により大きな値のものがあります。 Perl は、あなたが以下のようにしたかのように、256 で割った余りを文字の 値として使います:
pack("u", "\x{f3}b")
(W unpack) 以下のようなことをしましたが:
unpack("s", "\x{1f3}b")
ここでフォーマットはバイト(値が 256 より小さい文字)列を想定していますが、 文字の中により大きな値のものがあります。 Perl は、あなたが以下のようにしたかのように、256 で割った余りを文字の 値として使います:
unpack("s", "\x{f3}b")
close() on unopened filehandle %s
(W unopened) オープンされていないファイルハンドルをクローズしようとしました。
closedir() attempted on invalid dirhandle %s
(W io) 閉じようとしたディレクトリハンドルは既に閉じられているか、実際には ディレクトリハンドルではありません。 制御フローをチェックしてください。
(F) テンプレートが '/' で終わっています。 スラッシュの後には他のテンプレートコードが必須です。 pack in perlfunc を参照してください。
(A) スクリプトを perl ではなく csh で実行しようとしました。 #! 行をチェックするか、スクリプトを直接 Perl で起動してください。
(F) Perl は require 文で指定されたファイルをコンパイルできませんでした。
Perl は、コンパイルを直ちに停止させるほど厳しいエラーに遭遇しなかった
ときに、この一般的なメッセージを使います。
(W regexp) 正規表現エンジンはバックトラックが要求される複雑な状況では
再帰を使用します。
再帰の深さは 32766、またはスタックを任意に増やせないアーキテクチャでは
おそらくもっと小さい値に制限されています。
(「単純な」または「中くらいの」状況では再帰なしで扱われるので、制限は
ありません。)
調べる文字列を短くしてみてください; 正規表現エンジンではなく
(while などの) Perl コードを使ってループするか、
あるいは正規表現をより単純にしたり、バックトラックが少なくなるように
書き換えてください。
(Mastering Regular Expressions の情報については perlfaq2 を
参照してください。)
cond_broadcast() called on unlocked variable
(W threads) スレッドが有効になっているプログラムで、ロックされていない
変数に対して cond_broadcast() を呼び出そうとしました。
cond_broadcast() 関数は cond_wait() で待ち状態になっている他のスレッドを
起こすために使います。
他のスレッドが待ち状態になる前にこのシグナルが送られないことを確実に
するために、シグナルを送るスレッドはまず変数をロックするために待ち状態に
入るのが普通です。
このロックの試みは他のスレッドが cond_wait() に入ることで、ロックを
手放した場合にのみ成功します。
cond_signal() called on unlocked variable
(W threads) スレッドが有効になっているプログラムで、ロックされていない
変数に対して cond_signal() を呼び出そうとしました。
cond_signal() 関数は cond_wait() で待ち状態になっている他のスレッドを
起こすために使います。
他のスレッドが待ち状態になる前にこのシグナルが送られないことを確実に
するために、シグナルを送るスレッドはまず変数をロックするために待ち状態に
入るのが普通です。
このロックの試みは他のスレッドが cond_wait() に入ることで、ロックを
手放した場合にのみ成功します。
connect() on closed socket %s
(W closed) クローズされたソケットに connent を行なおうとしました。
socket() の呼び出し時に、返却値のチェックを忘れたたのではありませんか。
connect in perlfunc を参照してください。
(F) パーサは、オーバーロードされた定数を定義しようとしたときか、
\N{...} エスケープで指定された文字名を探そうとしたときに
非一貫性を発見しました。
おそらく対応する overload か charnames のプラグマの読み込みを
忘れたのでは?
charnames と overload を参照してください。
(F) パーサが、\N{...} エスケープで指定された文字名の検索中に矛盾を
発見しました。
おそらく対応する charnames プラグマの読み込みを忘れたのでは?
charnames を参照してください。
(F) (おそらく use constant プラグマを使って宣言した) 定数値が
デリファレンスされましたが、間違った型のリファレンスになりました。
このメッセージは想定されたリファレンスの型を示しています。
これは普通定数値をデリファレンスするときの文法エラーを示しています。
Constant Functions in perlsub と constant を参照してください。
(S) 以前にインライン化できる形であったサブルーチンを 再定義しました。 コメントと回避策については Constant Functions in perlsub を 参照してください。
(W misc)以前にインライン化できる形であったサブルーチンを 未定義化しました。 コメントと回避策については Constant Functions in perlsub を 参照してください。
(F) "=" をオーバーロードしたメソッドはバグっています。 Copy Constructor in overload を参照してください。
(F) CORE:: 名前空間は Perl キーワードとして予約されています。
(P) 正規表現コンパイラが渡したもので、正規表現エンジンが 処理できなくなりました。
(P) 正規表現エンジンが、有効なマジックナンバーを持たない regexp プログラムを渡しました。
(P) Perl に付属の malloc ルーティンが内部エラーを起こしました。
(F) unpack のテンプレートとしてカウント長文字列を示していますが、 文字列の長さも明示的に指定しています。 pack in perlfunc を参照してください。
(W recursion) このサブルーティンは、(直接、間接に) 自分自身の呼び出しを、 return より 100 回多く行ないました。 変わったベンチマークプログラムを書いているのでなければ、無限再帰の 可能性があります。 ベンチマークを書いている場合には、別のことを示しています。
defined(@array) is deprecated
(D deprecated) defined() は未定義の スカラ 値を調べるので、配列に
使っても普通は無意味です。
配列が空かどうかを調べたい場合は、例えば単に
if (@array) { # not empty } としてください。
defined(%hash) is deprecated
(D deprecated) defined() は未定義の スカラ 値を調べるので、ハッシュに
使っても普通は無意味です。
ハッシュが空かどうかを調べたい場合は、例えば単に
if (%hash) { # not empty } としてください。
(F) "use Module 42" のようなことをしましたが、Module ファイルに
パッケージ定義がないか、$VERSION がありませんでした。
(F) <<FOO のようなヒアドキュメント構造で、ラベル FOO が
Perl が扱うには長すぎました。
このエラーを起こすようなコードを書くには相当ひねくれている必要があります。
my() in false conditional
(D deprecated) my $x if 0 のような定義を行いました。
これは、宣言に偽の条件を含んでいるとスコープから外れた際にレキシカル変数が
クリアされないという、Perl に長い間存在したバグです。
ある種の静的変数を実現するためにこのバグを悪用する人々もいます。
私たちはこのバグを修正するつもりなので、人々がこの振る舞いに依存して
ほしくありません。
関数外の別のブロックで変数を宣言することで似たような静的な効果を
達成できます。
例えば:
sub f { my $x if 0; return $x++ }
これは以下のようにします:
{ my $x; sub f { return $x++ } }
perl 5.9.4 から、一度だけ初期化されるレキシカルとして state 変数も
使えます (feature を参照してください):
sub f { state $x; return $x++ }
(F) DESTROY() メソッドが、DESTROY したばかりのオブジェクトへの
新しいリファレンスを作りました。
Perl は混乱して、不明瞭なリファレンスを作るよりは中断することを選びました。
"Server error" を参照してください。
(F) require (や use) されたファイルは、正常にコンパイルされ、 初期化コードを正しく実行したことを示すために、真を返さなければなりません。 こういったファイルは、"1;" で終わるようにするのが習慣ですが、 真となる値であれば、何でもかまいません。 require in perlfunc を参照してください。
おそらく import したサブルーチン &FOO を $FOO として 参照したようなことでしょう。
(W misc) "our" 宣言されたグローバル変数を local 化しないことを 忘れないで下さい。 これをもう一度同じレキシカルスコープで宣言していますが、 不必要でしょう。
(W) おそらく $hash{$key} か @hash{@keys} としたいときに %hash{$key} と したのでしょう。 あるいは、単に %hash としたくてやりすぎたのでしょう。
(F) die() に空文字列を渡した(die "" と等価です)か、引数なしで
呼び出して、$@ と $_ が空でした。
"Server error" を参照してください。
(F) "use Module 42" のようなことをしましたが、Module は $VERSION を
定義していません。
(F) '/' の直後には繰り返し数を指定できません。 pack in perlfunc を参照してください。
(P) マジカル変数の内部処理がおかしくなっています。
(P) これは、本来 safemalloc() で引っ掛かるはずのものです。
(S syntax) これは "%s found where operator expected" メッセージと共に 表示される教育的な推測です。 これはしばしばサブルーチンやモジュール名がまだ宣言される前に参照されている ことを意味します。 これはファイル内部での順番のためであったり、"sub", "package", "require", "use" 文がないためであったりします。 もしまだ定義されていないものを参照したい場合、現在位置より前に実際に サブルーチンやパッケージを定義する必要はありません。 空の "sub foo;" や "package FOO;" を「前方」宣言として使えます。
dump() better written as CORE::dump()
(W misc) 古いものである dump() 組み込み関数を、CORE::dump() と
いうように完全修飾せずに使いました。
おそらくこれはタイプミスです。
dump in perlfunc を参照してください。
(F) このマシンは dump/undump に対応していません。
free() ignored
(S malloc) 既に解放されているものに対して、内部ルーティンが free() を
行なおうとしました。
(W) pack テンプレートで、一つの型の後に同じ修飾子を複数指定しました。 pack in perlfunc を参照してください。
(S) Larry は "elseif" というのは醜いと考えたので、Perl にはこのキーワードは ありません。 このコードは引き続くブロックによって返されたクラスの "elseif" メソッドを 呼び出そうとしていると解釈されます。 これは望んでいることではないはずです。
(F) \p と \P は、perlunicode と perlre に記述されているように、
名前付き Unicode プロパティを導入するために使われます。
正規表現の中で、\p や \P をプロパティ名の指定なしに使いました。
(F) use filetest プラグマを使っている間に、
実と実効の UID や GID の切り替えに失敗しました。
(F) 汚染モードで動作していて、%ENV 変数が他のハッシュへのエイリアスに
なっているので、これ以上プログラムの環境の状態を反映しません。
これは潜在的にはセキュアではありません。
(F) VMS に固有のエラーです。 Perl はファイル仕様を VMS 式か Unix 式かどちらかで扱わなければならないので、 直接操作しなければならない場合は変換します。 不正なファイル仕様を Perl に渡したか、変換ルーチンが扱えないパターンを 発見したかです。 ちぇっ。
(?{ ... }) ゼロ幅アサーションを含む正規表現をコンパイルしようと
したときに、Perl は汚染されたデータを検出しました;
これは安全ではありません。
perlre/(?{ code }) と perlsec を参照してください。
(F) Perl が実行時に、変数展開された値を含んでいて、
(?{ ... }) ゼロ幅アサーションを含む正規表現をコンパイルしようとしました。
これはセキュリティ上の危険があるので、許可されていません。
どうしても実行したい場合は、実行時に変数展開された文字列から
パターンを作成して、それを eval() の中で使うことで実行できます。
perlre/(?{ code }) を参照してください。
(F) 正規表現に (?{ ... }) ゼロ幅アサーションを含んでいますが、
この構造は use re 'eval' プラグマが有効の場合にのみ許可されます。
perlre/(?{ code }) を参照してください。
(F) テキストを一切読み込むことなく、EVAL 呼び出しのネストが多すぎる パターンを使いました。 テキストを読み込むようにパターンを再構築してください。
<-- HERE で正規表現のどこに問題が発見されたかを示しています。
(F) <> 演算子の内容は Perl 識別子の最大サイズを越えることはできません。 単にファイル名の長いリストをグロブしようとしただけなら、glob() 演算子を 使うか、ファイル名を変数に入れて、それをグロブしてください。
(F) exec 関数は MacPerl には実装されていません。
perlport を参照してください。
(F) Perl のコンパイルが失敗したときの、最後のまとめメッセージです。
(W exiting) goto やループ制御文など、おかしな方法で eval を抜けました。
(W exiting) goto やループ制御文といった、異例な形でフォーマットを 終了しました。
(W exiting) (ソートブロックやサブルーチンのような) 特別なブロック構造を、 goto やループ制御文といった異例な方法で終了しました。 sort in perlfunc を参照してください。
(W exiting) goto やループ制御文など、おかしな方法でサブルーティンを 抜けました。
(W exit) return や goto やループ制御文など、おかしな方法で置換を 抜けました。
(W misc) リファレンスを長さゼロの文字列に bless しました。 これはリファレンスをパッケージ main に bless する効果があります。 これは普通あなたが望んでいることではありません。 (bless($ref, $p || 'MyPackage'); のように) デフォルトターゲット パッケージを提供することを考慮してください;
(A) スクリプトを perl ではなく csh で実行しようとしました。 #! 行をチェックするか、スクリプトを直接 Perl で起動してください。
(F) UNITCHECK, CHECK, INIT, END サブルーチンを実行中にトラップされていない 例外が発生しました。 このようなルーチンのキューの残りの処理は途中で終了しました。
(W regexp) 文字クラス範囲の先頭とと末尾は、\d や [:alpha:] のような
他の文字クラスではなく、リテラル文字でなければなりません。
間違った範囲の "-" はリテラルの "-" と解釈されます。
"-" を "\-" とクォートすることを考慮してください。
<-- HERE は正規表現の中で問題が発見された位置を示します。
perlre を参照してください。
(P) VMS に固有のエラーです。 何か都合の悪いことが VMS システムサービスか RTL ルーチンで起こりました; Perl の終了コードに詳細が示されています。 "at %s" のファイル名と "line %d" の行番号は、問題の起こった Perl ソースコードの位置を示しています。
(F) このマシンでは、fcntl() が実装されていないように見えます。 PDP-11 か何かでしょうか。
(F) tie された配列に対して負の番号の要素を要求されました; これは不可能です。
(W pack) uuencode された文字列の各行が、63 以上にエンコードできない
長さ識別子から始まっています。
それで、これより長い行の長さを問い合わせるところがありません。
Perl はフォーマットとして u63 が指定されたかのように振る舞います。
(W io) リードオンリーのファイルハンドルに対して、書込みを行なおうとしました。 読み書き両用ファイルハンドルにしたいのであれば、"<" を付けたり、 何も付けなかったりするのではなく、"+<" や "+>" や "+>>" を付けて open する必要があります。 ライトオンリーであれば、">" や ">>" を使ってください。 open in perlfunc の項を参照してください。
(W io) 書き込み専用のファイルハンドルから読み込もうとしました。 読み書きできるファイルハンドルにしたい場合は、 ファイルのオープン時に "<" や何もなしではなく、 "+<" か "+>" か "+>>" をつける必要があります。 読み込み専用にしたい場合は、"<" を使ってください。 open in perlfunc を参照してください。 他の可能性としては、ファイル記述子 0 (STDIN としても知られています) を 出力用に開こうとした場合(おそらくその前に STDIN を閉じたのでは?)です。
(W io) STDOUT または STDERR として使われていたのと同じファイルハンドル ID の ファイルハンドルを読み込み用に開こうとしました。 これは、以前 STDOUT または STDERR を閉じたときに起きます。
(W io) STDIN として使われていたのと同じファイルハンドル ID の ファイルハンドルを書き込み用に開こうとしました。 これは、以前 STDIN を閉じたときに起きます。
(F) 文字列の最後の $ が、リテラルのドル記号なのか、変数名を入れようとして 忘れたのかを、はっきりさせなければなりません。 バックスラッシュを付けるか、名前を入れてください。