by Hippo2000(2001/2/26)
原本の著作権はMartien Verbruggen 氏がお持ちです(詳しくは著作権情報を見てください)。Martien Verbruggen 氏からは、メールで了解をいただきました。Thank you, Mr Verbruggen!
内容等が間違っていたら修正します。ご連絡ください。
GD::Graph::Error - GD::Graph クラスのためのエラー・ハンドリング
use GD::Graph::Error_subclass;
このクラスはGD::Graph::Dataを含めたすべてのGD::Graphクラスの親クラスです。そしてエラーと警告ハンドリングといくつかのデバッグ制御を提供します。
エラーはこのパッケージのレキシカルなハッシュに格納されます。そのためのサブクラスの実装は的外れでしょう。
GD::Graph::Error のすべてのサブクラスの利用者は、これらのメソッドをオブジェクトまたはクラスのエラーを取得するために使うことができます。
現在のオブジェクトが集積したすべてのエラーのリストを返します。スカラ・コンテキストでは最後のエラーを返します。もしクラス・メソッドとして呼ばれると、クラス・レベルで機能します。これはコンストラクタが失敗したときに便利です、例えば:
my $data = GD::Graph::Data->new()
or die GD::Graph::Data->error;
$data->read(file => '/foo/bar.data')
or die $data->error;
または本当に最後のエラーにだけ関心があるのであれば。
$data->read(file => '/foo/bar.data')
or die scalar $data->error;
この実装ではエラー・リストをクリアしません。そのためエラーで死ぬ(die)のでなければ、(これをスカラコンテキストに置くことによって)最後のエラー以外は決して聞かないようにするか、何度もclear_error()を呼び出す必要があります。
$GD::Graph::Error::Debug 変数をtrue値に設定すると、エラーが発生したところについてさらに冗長になります。そしてこの値が5よりも大きければ、さらに冗長になります。
もし$Debugが3より大きければ、これらの両方はエラーと警告のすべてのリストを返します。(has_warningとhas_errorが変更されなくても)
そのオブジェクトにもしエラー(警告)を保留していればtrueを返します。より厳密には、リスト・コンテキストではエラーのリストを返し、スカラ・コンテキストではエラーの数を返します。
これはそれぞれが失敗するかもしれない大量の操作の後にエラーと警告をチェックすることを可能にさせます:
$data->read(file => '/foo/bar.data') or die $data->error;
while (my @foo = $sth->fetchrow_array)
{
$data->add_point(@foo);
}
$data->set_x(12, 'Foo');
$data->has_warning and warn $data->warning;
$data->has_error and die $data->error;
単にerror()やwarning()と呼ぶ代わりにこれを呼んでその戻り値を見るのは、このメソッドがより効率的で速いからです。
もし悪いところをすべて数えたいのであれば、$ErrorLevelを0に設定してください。後はhas_errorを呼び出すだけです。
存在するエラーをクリアします。
これらのメソッドはこのクラスとそのサブクラスからのみ呼び出すことができます。
サブクラスはエラーを設定するためにこれを呼びます。引数は配列へのリファレンスにすることができます。その最初の要素はエラーレベル、2番目の要素はエラーメッセージです。代わりに単にメッセージにすることができます。その場合、エラーレベルは$ErrorLevelだと仮定されます。
もしエラーレベルが>= $CriticalLevelであればプログラムはCarp::croakを使って、保留されている他のエラーメッセージも含めて、現在のメッセージを表示し、死にます(die)。
現在の実装では、これらはスカラの引数で呼び出されたときにはデフォルトのエラーレベルが異なる点を除いては、ほとんど同じです。配列リファレンスで呼ばれたときには、同じ関数です。これは将来変更されるかもしれません。これらは主にコードをわかりやすくするためにあります。
オブジェクトからそれが所属しているクラスにエラーを移します。これは、これらのオブジェクトのうちの1つを初期化している間にコンストラクタで何かひどいことが発生したときに便利で、リターンする前にこれらのエラーをクラス空間に移さなければなりません。(例としてGD::Graph::Data::newをご覧ください)
この値を高くすると、より冗長なエラーメッセージが出力されます。現時点では、すべてのtrue値で、スタックの一番上にある呼出し元(caller)のソースファイルと行番号が入り、2より大きな値ではエラーの深刻さが入ります。そして5より大きいと直接呼出し元の(つまりエラーメッセージが発生した場所)の行番号とパッケージが入ります。デフォルト:0。
この値よりも低いエラー・レベルは警告として数えられ、それ以上で$CriticalLevelまでのエラーレベルとして数えられます。これは_set_error()メソッドのためのデフォルトのエラー・レベルでもあります。この値は0またはそれ以上、で$CriticalLevelよりも小さくなければなりません。デフォルト:5。
これレベル以上のエラーレベルはすべて、ただちにプログラムをCarp::croakを使い、特別なメッセージをつけて死なせます(die)。デフォルト:10。
すべてのPerlためのモジュールに:インタフェースを守って使うようにしてください。このモジュールの内部の知識を使ってもて遊びすぎると痛い目にあうでしょう。いつかはこれを変更するかもしれません。
Martien Verbruggen <mgjv@comdyn.com.au>
(原文のまま)
Copyright (c) 2000 Martien Verbruggen.
All rights reserved. This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。