.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Class::Gomor 3pm" .TH Class::Gomor 3pm "2022-10-13" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Class::Gomor \- another class and object builder .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module is yet another class builder. This one adds parameter checking in \fBnew\fR constructor, that is to check for attributes existence, and definedness. .PP In order to validate parameters, the module needs to find attributes, and that is the reason for declaring attributes in global variables named \fB\f(CB@AS\fB\fR, \fB\f(CB@AA\fB\fR, \fB\f(CB@AO\fB\fR. They respectively state for Attributes Scalar, Attributes Array and Attributes Other. The last one is used to avoid autocreation of accessors, that is to let you declare your own ones. .PP Attribute validation is performed by looking at classes hierarchy, by following \f(CW@ISA\fR tree inheritance. .PP The loss in speed by validating all attributes is quite negligeable on a decent machine (Pentium \s-1IV, 2.4\s0 GHz) with Perl 5.8.x. But if you want to avoid checking, you can do it, see below. .PP This class is the base class for \fBClass::Gomor::Array\fR and \fBClass::Gomor::Hash\fR, so they will inherite the following methods. .SH "GLOBAL VARIABLES" .IX Header "GLOBAL VARIABLES" .IP "\fB\f(CB$NoCheck\fB\fR" 4 .IX Item "$NoCheck" Import it in your namespace like this: .Sp use Class::Gomor qw($NoCheck); .Sp If you want to disable \fBcgCheckParams\fR to improve speed once your program is frozen, you can use this variable. Set it to 1 to disable parameter checking. .IP "\fB\f(CB$Debug\fB\fR" 4 .IX Item "$Debug" Import it in your namespace like this: .Sp use Class::Gomor qw($Debug); .Sp This variable is used by the \fBcgDebugPrint\fR method. .SH "METHODS" .IX Header "METHODS" .IP "\fBcgCheckParams\fR (hash ref, array ref)" 4 .IX Item "cgCheckParams (hash ref, array ref)" The attribute checking method takes two arguments, the first is user passed attributes (as a hash reference), the second is the list of valid attributes, gathered via \fBcgGetAttributes\fR method (as an array ref). A message is displayed if passed parameters are not valid. .IP "\fBcgGetIsaTree\fR (array ref)" 4 .IX Item "cgGetIsaTree (array ref)" A recursive method. You pass a class in an array reference as an argument, and then the \f(CW@ISA\fR array is browsed, recursively. The array reference passed as an argument is increased with new classes, pushed into it. It returns nothing, result is stored in the array ref. .IP "\fBcgGetAttributes\fR" 4 .IX Item "cgGetAttributes" This method returns available attributes for caller's object class. It uses \fBcgGetIsaTree\fR to search recursively in class hierarchy. It then returns an array reference with all possible attributes. .IP "\fBcgBuildAccessorsScalar\fR (array ref)" 4 .IX Item "cgBuildAccessorsScalar (array ref)" Accessor creation method. Takes an array reference containing all scalar attributes to create. Scalar accessors are stored in a global variable names \fB\f(CB@AS\fB\fR. So you call this method at the beginning of your class like that: .Sp _\|_PACKAGE_\|_\->cgBuildAccessorsScalar(\e@AS); .IP "\fBcgBuildAccessorsArray\fR (array ref)" 4 .IX Item "cgBuildAccessorsArray (array ref)" Accessor creation method. Takes an array reference containing all array attributes to create. Array accessors are stored in a global variable names \fB\f(CB@AA\fB\fR. So you call this method at the beginning of your class like that: .Sp _\|_PACKAGE_\|_\->cgBuildAccessorsArray(\e@AA); .IP "\fBcgClone\fR [ (scalar) ]" 4 .IX Item "cgClone [ (scalar) ]" You can clone one of your objects by calling this method. An optional parameter may be used to create multiple clones. Cloning will occure only on the first level attributes, that is, if you have attributes containing other objects, they will not be cloned. .IP "\fBcgFullClone\fR [ (scalar) ]" 4 .IX Item "cgFullClone [ (scalar) ]" This method is the same as \fBcgClone\fR, but will clone all attributes recursively, but only if they are subclassed from \fBClass::Gomor\fR. So, objects created with other modules than \fBClass::Gomor::Array\fR or \fBClass::Gomor::Hash\fR will not be cloned. .Sp Another thing to note, there is no catch for cycling references (when you link two objects with each others). You have been warned. .IP "\fBcgDebugPrint\fR (scalar, scalar)" 4 .IX Item "cgDebugPrint (scalar, scalar)" First argument is a debug level. It is compared with global \fB\f(CB$Debug\fB\fR, and if it is less than it, the second argument (a message string) is displayed. This method exists because I use it, maybe you will not like it. .SH "SEE ALSO" .IX Header "SEE ALSO" Class::Gomor::Array, Class::Gomor::Hash .SH "AUTHOR" .IX Header "AUTHOR" Patrice Auffret .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (c) 2004\-2015, Patrice Auffret .PP You may distribute this module under the terms of the Artistic license. See \s-1LICENSE\s0.Artistic file in the source distribution archive.