discourse-legacysite-perl/site/glist/templates/help/GT/Base.html
2024-06-17 22:24:05 +10:00

428 lines
9.6 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::Base - Common base module to be inherited by all classes.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#debugging">Debugging</a></li>
<li><a href="#error_handling">Error Handling</a></li>
<li><a href="#error_trapping">Error Trapping</a></li>
<li><a href="#stack_trace">Stack Trace</a></li>
<li><a href="#accessor_methods">Accessor Methods</a></li>
<li><a href="#parameter_parsing">Parameter Parsing</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::Base - Common base module to be inherited by all classes.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::Base;
use vars qw/@ISA $ATTRIBS $ERRORS/
@ISA = qw/GT::Base/;
$ATTRIBS = {
accessor =&gt; default,
accessor2 =&gt; default,
};
$ERRORS = {
BADARGS =&gt; &quot;Invalid argument: %s passed to subroutine: %s&quot;,
};</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::Base is a base class that is used to provide common error handling,
debugging, creators and accessor methods.</p>
<p>To use GT::Base, simply make your module inherit from GT::Base. That
will provide the following functionality:</p>
<p>
</p>
<h2><a name="debugging">Debugging</a></h2>
<p>Two new methods are available for debugging:</p>
<pre>
$self-&gt;debug($msg, [DEBUG_LEVEL]);</pre>
<p>This will send a $msg to STDERR if the current debug level is greater
then the debug level passed in (defaults to 1).</p>
<pre>
$self-&gt;debug_level(DEBUG_LEVEL);
Class-&gt;debug_level(DEBUG_LEVEL);</pre>
<p>You can call <code>debug_level()</code> to set or get the debug level. It can
be set per object by calling it as an object method, or class wide
which will initilize all new objects with that debug level (only if
using the built in creator).</p>
<p>The debugging uses a package variable:</p>
<pre>
$Class::DEBUG = 0;</pre>
<p>and assumes it exists.</p>
<p>
</p>
<h2><a name="error_handling">Error Handling</a></h2>
<p>Your object can now generate errors using the method:</p>
<pre>
$self-&gt;error(CODE, LEVEL, [args]);</pre>
<p>CODE should be a key to a hash of error codes to user readable
error messages. This hash should be stored in $ERRORS which is
defined in your pacakge, or the package named in $ERROR_MESSAGE.</p>
<p>LEVEL should be either 'FATAL' or 'WARN'. If not specified it defaults
to FATAL. If it's a fatal error, the program will print the message
to STDERR and die.</p>
<p>args can be used to format the error message. For instance, you can
defined commonly used errors like:</p>
<pre>
CANTOPEN =&gt; &quot;Unable to open file: '%s': %s&quot;</pre>
<p>in your $ERRORS hash. Then you can call error like:</p>
<pre>
open FILE, &quot;somefile.txt&quot;
or return $self-&gt;error(CANTOPEN =&gt; FATAL =&gt; &quot;somefile.txt&quot;, &quot;$!&quot;);</pre>
<p>The error handler will format your message using sprintf(), so all
regular printf formatting strings are allowed.</p>
<p>Since errors are kept within an array, too many errors can pose a
memory problem. To clear the error stack simply call:</p>
<pre>
$self-&gt;clear_errors();</pre>
<p>
</p>
<h2><a name="error_trapping">Error Trapping</a></h2>
<p>You can specify at run time to trap errors.</p>
<pre>
$self-&gt;catch_errors(\&amp;code_ref);</pre>
<p>which sets a $SIG{__DIE__} handler. Any fatal errors that occur, will
run your function. The function will not be run if the fatal was thrown
inside of an eval though.</p>
<p>
</p>
<h2><a name="stack_trace">Stack Trace</a></h2>
<p>You can print out a stack trace at any time by using:</p>
<pre>
$self-&gt;stack_trace(1);
Class-&gt;stack_trace(1);</pre>
<p>If you pass in 1, the stack trace will be returned as a string, otherwise
it will be printed to STDOUT.</p>
<p>
</p>
<h2><a name="accessor_methods">Accessor Methods</a></h2>
<p>Using GT::Base automatically provides accessor methods for all your
attributes. By specifying:</p>
<pre>
$ATTRIBS = {
attrib =&gt; 'default',
...
};</pre>
<p>in your package, you can now call:</p>
<pre>
my $val = $obj-&gt;attrib();
$obj-&gt;attrib($set_val);</pre>
<p>to set and retrieve the attributes for that value.</p>
<p>Note: This uses AUTOLOAD, so if you implement AUTOLOAD in your package,
you must have it fall back to GT::Base::AUTOLOAD if it fails. This
can be done with:</p>
<pre>
AUTOLOAD {
...
goto &amp;GT::Base::AUTOLOAD;
}</pre>
<p>which will pass all arguments as well.</p>
<p>
</p>
<h2><a name="parameter_parsing">Parameter Parsing</a></h2>
<p>GT::Base also provides a method to parse parameters. In your methods you
can do:</p>
<pre>
my $self = shift;
my $parm = $self-&gt;common_param(@_);</pre>
<p>This will convert any of a hash reference, hash or CGI object into a hash
reference.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Base.pm,v 1.132 2005/06/22 19:59:25 jagerman Exp $</p>
</body>
</html>