/[suikacvs]/messaging/manakai/lib/Error.html
Suika

Contents of /messaging/manakai/lib/Error.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download) (as text)
Sun Jul 29 07:25:06 2007 UTC (16 years, 9 months ago) by wakaba
Branch: MAIN
CVS Tags: manakai-release-0-4-0, HEAD
File MIME type: text/html
++ manakai/doc/web/ChangeLog	29 Jul 2007 07:23:54 -0000
	* cover.ja.html: Added link to module documentations.

2007-07-29  Wakaba  <wakaba@suika.fam.cx>

++ manakai/lib/ChangeLog	29 Jul 2007 07:24:21 -0000
2007-07-29  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (all): Make |Error.html|.
	(clean): Remove temporary files.
	(distclean): Remove |Error.html|.

++ manakai/lib/Message/Util/ChangeLog	29 Jul 2007 07:16:48 -0000
2007-07-29  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (all-document): New.
	(all): Do |all-document|.

++ manakai/lib/Message/Util/QName/ChangeLog	29 Jul 2007 07:16:30 -0000
2007-07-29  Wakaba  <wakaba@suika.fam.cx>

	* Filter.pm: A typo in pod is fixed.  Pod's outdated
	 see also section is removed.

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title>Error - Error/exception handling in an OO-ish way</title>
5 <link rel="stylesheet" href="http://suika.fam.cx/www/style/html/pod.css" type="text/css" />
6 <link rev="made" href="mailto:admin@suika.fam.cx" />
7 </head>
8
9 <body>
10
11 <p><a name="__index__"></a></p>
12 <!-- INDEX BEGIN -->
13
14 <ul>
15
16 <li><a href="#name">NAME</a></li>
17 <li><a href="#synopsis">SYNOPSIS</a></li>
18 <li><a href="#description">DESCRIPTION</a></li>
19 <li><a href="#procedural_interface">PROCEDURAL INTERFACE</a></li>
20 <li><a href="#class_interface">CLASS INTERFACE</a></li>
21 <ul>
22
23 <li><a href="#constructors">CONSTRUCTORS</a></li>
24 <li><a href="#static_methods">STATIC METHODS</a></li>
25 <li><a href="#object_methods">OBJECT METHODS</a></li>
26 <li><a href="#overload_methods">OVERLOAD METHODS</a></li>
27 </ul>
28
29 <li><a href="#predefined_error_classes">PRE-DEFINED ERROR CLASSES</a></li>
30 <li><a href="#known_bugs">KNOWN BUGS</a></li>
31 <li><a href="#authors">AUTHORS</a></li>
32 <li><a href="#maintainer">MAINTAINER</a></li>
33 </ul>
34 <!-- INDEX END -->
35
36 <hr />
37 <p>
38 </p>
39 <h1><a name="name">NAME</a></h1>
40 <p>Error - Error/exception handling in an OO-ish way</p>
41 <p>
42 </p>
43 <hr />
44 <h1><a name="synopsis">SYNOPSIS</a></h1>
45 <pre>
46 use Error qw(:try);</pre>
47 <pre>
48 throw Error::Simple( &quot;A simple error&quot;);</pre>
49 <pre>
50 sub xyz {
51 ...
52 record Error::Simple(&quot;A simple error&quot;)
53 and return;
54 }
55
56 unlink($file) or throw Error::Simple(&quot;$file: $!&quot;,$!);</pre>
57 <pre>
58 try {
59 do_some_stuff();
60 die &quot;error!&quot; if $condition;
61 throw Error::Simple -text =&gt; &quot;Oops!&quot; if $other_condition;
62 }
63 catch Error::IO with {
64 my $E = shift;
65 print STDERR &quot;File &quot;, $E-&gt;{'-file'}, &quot; had a problem\n&quot;;
66 }
67 except {
68 my $E = shift;
69 my $general_handler=sub {send_message $E-&gt;{-description}};
70 return {
71 UserException1 =&gt; $general_handler,
72 UserException2 =&gt; $general_handler
73 };
74 }
75 otherwise {
76 print STDERR &quot;Well I don't know what to say\n&quot;;
77 }
78 finally {
79 close_the_garage_door_already(); # Should be reliable
80 }; # Don't forget the trailing ; or you might be surprised</pre>
81 <p>
82 </p>
83 <hr />
84 <h1><a name="description">DESCRIPTION</a></h1>
85 <p>The <code>Error</code> package provides two interfaces. Firstly <code>Error</code> provides
86 a procedural interface to exception handling. Secondly <code>Error</code> is a
87 base class for errors/exceptions that can either be thrown, for
88 subsequent catch, or can simply be recorded.</p>
89 <p>Errors in the class <code>Error</code> should not be thrown directly, but the
90 user should throw errors from a sub-class of <code>Error</code>.</p>
91 <p>
92 </p>
93 <hr />
94 <h1><a name="procedural_interface">PROCEDURAL INTERFACE</a></h1>
95 <p><code>Error</code> exports subroutines to perform exception handling. These will
96 be exported if the <code>:try</code> tag is used in the <code>use</code> line.</p>
97 <dl>
98 <dt><strong><a name="item_try">try BLOCK CLAUSES</a></strong><br />
99 </dt>
100 <dd>
101 <a href="#item_try"><code>try</code></a> is the main subroutine called by the user. All other subroutines
102 exported are clauses to the try subroutine.
103 </dd>
104 <dd>
105 <p>The BLOCK will be evaluated and, if no error is throw, try will return
106 the result of the block.</p>
107 </dd>
108 <dd>
109 <p><code>CLAUSES</code> are the subroutines below, which describe what to do in the
110 event of an error being thrown within BLOCK.</p>
111 </dd>
112 <p></p>
113 <dt><strong><a name="item_catch_class_with_block">catch CLASS with BLOCK</a></strong><br />
114 </dt>
115 <dd>
116 This clauses will cause all errors that satisfy <code>$err-&gt;isa(CLASS)</code>
117 to be caught and handled by evaluating <code>BLOCK</code>.
118 </dd>
119 <dd>
120 <p><code>BLOCK</code> will be passed two arguments. The first will be the error
121 being thrown. The second is a reference to a scalar variable. If this
122 variable is set by the catch block then, on return from the catch
123 block, try will continue processing as if the catch block was never
124 found.</p>
125 </dd>
126 <dd>
127 <p>To propagate the error the catch block may call <a href="#item_throw"><code>$err-&gt;throw</code></a></p>
128 </dd>
129 <dd>
130 <p>If the scalar reference by the second argument is not set, and the
131 error is not thrown. Then the current try block will return with the
132 result from the catch block.</p>
133 </dd>
134 <p></p>
135 <dt><strong><a name="item_except">except BLOCK</a></strong><br />
136 </dt>
137 <dd>
138 When <a href="#item_try"><code>try</code></a> is looking for a handler, if an except clause is found
139 <code>BLOCK</code> is evaluated. The return value from this block should be a
140 HASHREF or a list of key-value pairs, where the keys are class names
141 and the values are CODE references for the handler of errors of that
142 type.
143 </dd>
144 <p></p>
145 <dt><strong><a name="item_otherwise">otherwise BLOCK</a></strong><br />
146 </dt>
147 <dd>
148 Catch any error by executing the code in <code>BLOCK</code>
149 </dd>
150 <dd>
151 <p>When evaluated <code>BLOCK</code> will be passed one argument, which will be the
152 error being processed.</p>
153 </dd>
154 <dd>
155 <p>Only one otherwise block may be specified per try block</p>
156 </dd>
157 <p></p>
158 <dt><strong><a name="item_finally">finally BLOCK</a></strong><br />
159 </dt>
160 <dd>
161 Execute the code in <code>BLOCK</code> either after the code in the try block has
162 successfully completed, or if the try block throws an error then
163 <code>BLOCK</code> will be executed after the handler has completed.
164 </dd>
165 <dd>
166 <p>If the handler throws an error then the error will be caught, the
167 finally block will be executed and the error will be re-thrown.</p>
168 </dd>
169 <dd>
170 <p>Only one finally block may be specified per try block</p>
171 </dd>
172 <p></p></dl>
173 <p>
174 </p>
175 <hr />
176 <h1><a name="class_interface">CLASS INTERFACE</a></h1>
177 <p>
178 </p>
179 <h2><a name="constructors">CONSTRUCTORS</a></h2>
180 <p>The <code>Error</code> object is implemented as a HASH. This HASH is initialized
181 with the arguments that are passed to it's constructor. The elements
182 that are used by, or are retrievable by the <code>Error</code> class are listed
183 below, other classes may add to these.</p>
184 <pre>
185 -file
186 -line
187 -text
188 -value
189 -object</pre>
190 <p>If <code>-file</code> or <code>-line</code> are not specified in the constructor arguments
191 then these will be initialized with the file name and line number where
192 the constructor was called from.</p>
193 <p>If the error is associated with an object then the object should be
194 passed as the <code>-object</code> argument. This will allow the <code>Error</code> package
195 to associate the error with the object.</p>
196 <p>The <code>Error</code> package remembers the last error created, and also the
197 last error associated with a package. This could either be the last
198 error created by a sub in that package, or the last error which passed
199 an object blessed into that package as the <code>-object</code> argument.</p>
200 <dl>
201 <dt><strong><a name="item_throw">throw ( [ ARGS ] )</a></strong><br />
202 </dt>
203 <dd>
204 Create a new <code>Error</code> object and throw an error, which will be caught
205 by a surrounding <a href="#item_try"><code>try</code></a> block, if there is one. Otherwise it will cause
206 the program to exit.
207 </dd>
208 <dd>
209 <p><a href="#item_throw"><code>throw</code></a> may also be called on an existing error to re-throw it.</p>
210 </dd>
211 <p></p>
212 <dt><strong><a name="item_with">with ( [ ARGS ] )</a></strong><br />
213 </dt>
214 <dd>
215 Create a new <code>Error</code> object and returns it. This is defined for
216 syntactic sugar, eg
217 </dd>
218 <dd>
219 <pre>
220 die with Some::Error ( ... );</pre>
221 </dd>
222 <p></p>
223 <dt><strong><a name="item_record">record ( [ ARGS ] )</a></strong><br />
224 </dt>
225 <dd>
226 Create a new <code>Error</code> object and returns it. This is defined for
227 syntactic sugar, eg
228 </dd>
229 <dd>
230 <pre>
231 record Some::Error ( ... )
232 and return;</pre>
233 </dd>
234 <p></p></dl>
235 <p>
236 </p>
237 <h2><a name="static_methods">STATIC METHODS</a></h2>
238 <dl>
239 <dt><strong><a name="item_prior">prior ( [ PACKAGE ] )</a></strong><br />
240 </dt>
241 <dd>
242 Return the last error created, or the last error associated with
243 <code>PACKAGE</code>
244 </dd>
245 <p></p></dl>
246 <p>
247 </p>
248 <h2><a name="object_methods">OBJECT METHODS</a></h2>
249 <dl>
250 <dt><strong><a name="item_stacktrace">stacktrace</a></strong><br />
251 </dt>
252 <dd>
253 If the variable <code>$Error::Debug</code> was non-zero when the error was
254 created, then <a href="#item_stacktrace"><code>stacktrace</code></a> returns a string created by calling
255 <code>Carp::longmess</code>. If the variable was zero the <a href="#item_stacktrace"><code>stacktrace</code></a> returns
256 the text of the error appended with the filename and line number of
257 where the error was created, providing the text does not end with a
258 newline.
259 </dd>
260 <p></p>
261 <dt><strong><a name="item_object">object</a></strong><br />
262 </dt>
263 <dd>
264 The object this error was associated with
265 </dd>
266 <p></p>
267 <dt><strong><a name="item_file">file</a></strong><br />
268 </dt>
269 <dd>
270 The file where the constructor of this error was called from
271 </dd>
272 <p></p>
273 <dt><strong><a name="item_line">line</a></strong><br />
274 </dt>
275 <dd>
276 The line where the constructor of this error was called from
277 </dd>
278 <p></p>
279 <dt><strong><a name="item_text">text</a></strong><br />
280 </dt>
281 <dd>
282 The text of the error
283 </dd>
284 <p></p></dl>
285 <p>
286 </p>
287 <h2><a name="overload_methods">OVERLOAD METHODS</a></h2>
288 <dl>
289 <dt><strong><a name="item_stringify">stringify</a></strong><br />
290 </dt>
291 <dd>
292 A method that converts the object into a string. This method may simply
293 return the same as the <a href="#item_text"><code>text</code></a> method, or it may append more
294 information. For example the file name and line number.
295 </dd>
296 <dd>
297 <p>By default this method returns the <code>-text</code> argument that was passed to
298 the constructor, or the string <code>&quot;Died&quot;</code> if none was given.</p>
299 </dd>
300 <p></p>
301 <dt><strong><a name="item_value">value</a></strong><br />
302 </dt>
303 <dd>
304 A method that will return a value that can be associated with the
305 error. For example if an error was created due to the failure of a
306 system call, then this may return the numeric value of <code>$!</code> at the
307 time.
308 </dd>
309 <dd>
310 <p>By default this method returns the <code>-value</code> argument that was passed
311 to the constructor.</p>
312 </dd>
313 <p></p></dl>
314 <p>
315 </p>
316 <hr />
317 <h1><a name="predefined_error_classes">PRE-DEFINED ERROR CLASSES</a></h1>
318 <dl>
319 <dt><strong><a name="item_error_3a_3asimple">Error::Simple</a></strong><br />
320 </dt>
321 <dd>
322 This class can be used to hold simple error strings and values. It's
323 constructor takes two arguments. The first is a text value, the second
324 is a numeric value. These values are what will be returned by the
325 overload methods.
326 </dd>
327 <dd>
328 <p>If the text value ends with <code>at file line 1</code> as $@ strings do, then
329 this infomation will be used to set the <code>-file</code> and <code>-line</code> arguments
330 of the error object.</p>
331 </dd>
332 <dd>
333 <p>This class is used internally if an eval'd block die's with an error
334 that is a plain string.</p>
335 </dd>
336 <p></p></dl>
337 <p>
338 </p>
339 <hr />
340 <h1><a name="known_bugs">KNOWN BUGS</a></h1>
341 <p>None, but that does not mean there are not any.</p>
342 <p>
343 </p>
344 <hr />
345 <h1><a name="authors">AUTHORS</a></h1>
346 <p>Graham Barr &lt;<a href="mailto:gbarr@pobox.com">gbarr@pobox.com</a>&gt;</p>
347 <p>The code that inspired me to write this was originally written by
348 Peter Seibel &lt;<a href="mailto:peter@weblogic.com">peter@weblogic.com</a>&gt; and adapted by Jesse Glick
349 &lt;<a href="mailto:jglick@sig.bsh.com">jglick@sig.bsh.com</a>&gt;.</p>
350 <p>
351 </p>
352 <hr />
353 <h1><a name="maintainer">MAINTAINER</a></h1>
354 <p>Arun Kumar U &lt;<a href="mailto:u_arunkumar@yahoo.com">u_arunkumar@yahoo.com</a>&gt;</p>
355
356 </body>
357
358 </html>

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24