Index
Symbols
"<=>" operator 279
"=" operator 291, 434
"0+" operator 283, 434
"bool" operator 284, 434
#line directive 315
$ (scalar type specifier) 21
as dereferencer 37
$#array_name 23
$^W variable 90
$_[0], assigning to 341
$AUTOLOAD 55, 91, 338
$VERSION 54
% (hash type specifier) 26
as dereferencer 37
%FIELDS 130
& (subroutine type specifier) 29
and goto 30, 264
in subroutine call 30, 83
&AUTOLOAD 55, 91, 171, 195, 269, 281, 338, 352, 431
and array-based objects 123
as generic method 327
as generic subroutine 56
cost of 93
destructors 112
efficiency 93
learning from experience 93
non-public attributes 92
&can 179, 210, 338
&CLEAR 249
&clone method 105
&CLOSE 257
© method 105
&DELETE 244
&DESTROY 106, 176, 238, 244, 250, 257
&EXISTS 244
&EXTEND 249
&FETCH 238, 244
&FETCHSIZE 249
&fingerprint 265
&FIRSTKEY 244, 262, 263
&GETC 257
&import 52, 54, 331
&import subroutine 60
&isa 179, 361
&mutate 265
&new 96
&NEXTKEY 244, 262, 263
&OPEN 257, 260, 268, 273
&POP 250
&PRINT 256, 273
&PUSH 250
&READ 257, 273
&read_only subroutine 83
&READLINE 257
&SEEK 268
&SPLICE 250
&STORE 238, 244
&STORESIZE 249
&TIEARRAY 249
&TIEHASH 244
&TIESCALAR 238
&TRUNCATE 268
&VERSION 54, 182
*
Class::Struct type specifier 217
multiplication operator 293
typeglob type specifier 60
*foo{THING} syntax 63
*symbol_name typeglob syntax 60
++ operator 241
+= operator 241, 294
. operator 283, 293
.login file 53
.pm suffix 51
:: package name separator 44
<=> operator 280, 286
<> operator 166, 257
=> operator 26
for named arguments 31
> operator 141, 430
calling class methods 79
extension to method calls 75
not used for scalar references 137
?: operator 102, 284
@ (array type specifier) 22
as dereferencer 37
@_ array 29, 76
aliasing 33
copying to avoid aliasing 33
@array_name 23
@EXPORT 410
@INC 52
@ISA 168, 191, 431
^ operator 293
__DATA__ 335
_Initializable class 173
|| operator 102
~ operator 141
Numerics
1, at end of module 53
2001 381
A
ABC 12
abstract base class 12, 343, 459
abstract data type 459
abstract method 12, 185, 232, 344, 418, 432, 459
in other languages 452, 456
other terms for 18
abstract object 12
abstract relationships 6
abstraction
of arguments 356
of regular expressions 145
vs genericity 327
access
class attributes 85
direct vs encapsulated 297
discouraging direct access 82
hash-like 132
memory mapped 416
restriction of 198
specifier 298
speed, hash vs array 119
Tie::SecureHash 311
to class attribute 200
to data 152
to every object of a class 306
to external data 393
to objects via references 291
access mechanism 2
accessibility
of lexicals used in scalars 57
vs existence 57
accessing typeglob slots 62
accessor 82, 122, 304, 418, 430, 459
as a convenience 300
explicitly coded 123
for class hierarchy only 301
for persistent class 427
for persistent objects 415
generating 213
get/set 224
tedious to write 91
accidents 297
actual target 370, 372, 459
Ada 19
add-assignment operator 241
address space 389
adopting new behaviour from helper class 338
Advanced Perl Programming 69, 166, 274, 326, 428
advantages
of hash-based objects 136
of inheritance 414
aesthetics 186, 423
affordances 83, 151, 293, 459
aggregation 14, 418, 459
advantages 15
of persistent variables 411
algebra 292
Algol 454
alias
behaviour of @_ 33
aliasing 459
of $_[0] 423
aliens 237
all-or-nothing encapsulation 309
ambiguity
in inheritance 9
in multimethod initialization 360
in multiple dispatch 370
indirect object syntax 99
of handlers 367
of unqualified secure-hash keys 317
ancestor 360
ancestor class 459
Ancient Greek gods 46
anonymous array 40
as object 429
as pseudo-hash 132
as sorted hash cache 264
mortality of 49
anonymous hash 41, 77, 304
as implementation object 242
mortality of 49
anonymous scalar
creating 136
anonymous subroutine 42, 261, 298, 329
as closure 57
as lexer 156
as multimethod handler 358
as object 152
as operator implementation 278
as private method 87
calling 42
anonymous typeglob 165, 253, 415
anti-Thursday 281
Aphrodite 46
arbitrary operations 293
argument
abstraction of 356, 368
aliasing 76
constructors that take many 101
default 102
first 352
forgetting 101
in other languages 450
list as hash 101
original list 359
reversed 286, 433
single 374
to method 75
to overloaded operator 278
to subroutine 29
unfamiliar 363
arithmetic operation 283
array 22
already generic 328
anonymous 40
as object 76, 119
as stack or queue 24
change in size of 249
Class::Struct 214
index 283
initialization 23
length 23
look-up 130
natural choice of 123
of references to attributes 201
passing to subroutine by reference 42
persistent 410
pretending to be hash
See pseudo-hash 126
reference to 420
slice 25
tied 249
array index
as object 304
array slice 199
for initialization 122
arrow operator 38, 291, 430
ASCII
ancient Romans, non-use of 284
to EBCDIC 261
Ashton-Jones, Gary xviii
assignment
composite operators 241
non-overloadability of 278
object-to-object 103
of arrays 249
of references 291
of typeglobs 60
to attribute 216
to typed variables 131
undetectability of 412
vs overloaded 292
ATM 2
aggregating attributes 15
attributes 3
methods 3
Atropos 46
attribute 2, 430, 459
access list 93
accessor 82
class 228
class attribute 430, 432
Class::Struct 215
code-like 231
collisions under inheritance 186
computed and memoized 150
encapsulation 434
flag-like 226, 432
hash 228, 432
in other languages 439, 444, 450, 454
inheritance of 170
internal 78
key-like 226, 432
list 432
logically grouped 225, 432
of an object 78
physically grouped 227, 432
polymorphic 316
private 301, 309, 315, 326
protected 309, 318, 325
public 309, 318, 325
readable labels for 119
scalar 224, 432
single-bit 226
storage and retrieval 400
subroutine 231
type 215
unique value 226
which is an object 228
attribute value 2, 460
retention of 16
autogeneration of operators 281
autoloaded method 91
automagical
multiple dispatch 367
operators 286
automatic persistence 397, 400
automation of dynamic dispatch table 367
autovivification 119, 227, 248, 297, 460
and pseudo-hashes 127
and securehashes 312, 325
awk 397
B
Bach, Johann Sebastian 412
Back to the Future 411
backquotes 56
Bad Things 82
balanced heap 347
Banzai, Buckaroo 43
bar, polymorphic pick-up lines 9
bar-codes 239
bareword class name 99
Barr, Graham xviii
base class 5, 460
base class destructor
invoking 176
base.pm module 191, 309
bases (genetic) 250, 265
basic ideas of object orientation 1
Beattie, Malcolm 416
bed-swapping 307
BEGIN block 331, 398
beginners 309
behaviour
emergent 350, 379
of a class 179
of a multimethod 384
of variables 236
of variants 368
post-mortem 424
benefits of object orientation xiv
best fit behaviour 356
bible 69
bibliography 466
big
city 296
hairy dot 293
Biggar, Mark 276
binary search tree 16, 339
insertion 340
persistent 424
Bit::String class 138
persistent 413
bit-flag 226
bitmap 232
bits
addressing via vec function 138
bit-trail 35
Blakey, Adrian xviii
bless function 76, 429
arguments 77
in constructor 79
one-argument form 196, 219
two-argument form 172, 196, 220, 223, 233, 398, 431
blessing
and tie-ing to same package 311
different datatypes into same class 79
non-hashes 118
not assigned 103
scalars 135
subroutine 152
tied variables 265
typeglobs 158
blood pressure 294
Booch, Grady 19
books
miscellaneous 467
on object orientation 466
on other object-oriented languages 454, 467
on Perl 69, 466
boolean 140, 226
borrowing behaviour 343
bottle-neck encasulation 309
box of chocolates, symbol table entry like a 59
brain
alien consumption of 237
surgery vs closures 56
breadth-first multiple dispatch 368, 372, 385
brittle 353
Brocard, Leon xviii
Brown, Vicki 69
browser cache 245
brute force 83
buffered I/O 415
bugs
$ prototype and scalar context 36
+ documentation = features 344
|| operator and 0 values 102
accidental breach of interface 302
aliasing 33
ambiguous securehash keys 318
arbitrary or obscure operations 293
assignment of object references 291
attribute collision 186
autovivification of non-existent attributes 119, 248, 297
calling methods on tied filehandles 273
changing @ISA array 179
circular references 108
code in the wrong package 321
compile-time diagnosis 131
conventions not scaling well 296
data equivalence vs referential equality 306
documentation of 96
explicit wait 160
failure to initialize 98
fixed dispatch table and derived types 362
hard-coding class relationships 176
hunt-and-destroy 183
in simple peristent class 404
indirect object syntax 101
left-most abstract methods 185
left-most depth-first dispatch resolution 368
map block returning undef 184
misgeneralization 83
misnaming attributes in accessors 91
missing most of the data 151
multiplying references 278
mutating MLDBM hash sub-entries 420
nested iterators 123
not "typing" a lexical for pseudo-hashes 132
not reswizzling memory addresses 389
object-to-object assignment 103
opening a tied filehandle 257
overloading the . operator 293
overwriting key attributes 227
package variables vs lexicals 306
pseudo-hashes and inheritance 191
qualified vs unqualified securehash keys 324
security via obscurity 264
spelling errors 128
termination whilst saving data 388
wrong comparison subroutine 330
built-in functions
bless 76, 429, 431
caller 35, 264
close 159, 257
crypt 136
delete 244
do 393
each 27, 123, 244, 309, 315
eof 257
eval 148, 329, 334, 340, 347, 392, 399, 408, 437
fileno 257
getc 257
grep 284
int 283
join 140
keys 27, 244, 315
local 49
map 140, 384, 415
my 46
open 257, 268
pack 138
package 43
pop 24, 250
print 256, 415
printf 256
push 24, 250
rand 297, 308
read 257, 415
readline 257
ref 38, 63, 359, 381, 389, 398
return 29
-s (file length) 416
seek 253, 257, 268, 415
select 257
shift 25, 250
splice 25, 250, 363
split 415
sprintf 335, 426
sub 28
substr 283
sysopen 257, 393
sysread 257, 415
sysseek 257, 415
syswrite 256, 415
tell 257
tie 236, 393, 433
tied 243, 257, 268
truncate 254, 257, 268
unshift 25, 250
untie 238
values 27, 244, 315
vec 138
wait 160
wantarray 34
warn 34
write 257
z (zero-sized file) 415
Bunce, Tim xviii, 394
Burke, Sean M. 170, 201
C
C (programming language) 153, 398, 443
C++ xii, 19, 75, 76, 131, 153, 314, 318, 326, 353, 398, 443, 449, 451, 467
caching
&can 181
eliminating cache when serializing 399
multimethod handlers 364
of generic code template 335
of methods 171
of multimethod variants 370
sorted hash keys 263
Caesar, Gaius Julius 304
caller function 35, 264
additional return values 35
calling methods
annoying need to 276
under inheritance 169
Cantrell, David xviii
cardinal rule of object orientation 82
cardinal virtue 103
carp subroutine 34
cascading messages (Smalltalk concept) 440
case statement 205, 352, 355
case-insensitive keys 245
casual programming 90
cat 245
catch-all
handler 356, 359
method 91
multimethod pseudo-type 382
subroutine 55
CD::Music
inheritance of destructor 197
methods 82
CD::Music::Classical 193
CD::Shiny::Beer 80
cephalopods 13
Cetus Links 19
chain
of destruction 178
of references 110
changing read-only attribute 83
chapter summary xiv
character string
as Roman numeral 290
encoded 393
uninterpolated 392
chef 294
child
class 5, 460
node 339
process 159
China 276
choreographed behaviour 350
Christiansen, Tom xviii, 69, 198, 300, 326
circular data structures 108
clarity 293
class 3, 460
abstract base 12
adding new methods from &AUTOLOAD 93
array-based 431
as blueprint 3
as package 429
as shared category 12
attribute 4, 228, 432, 460
base 5
child 5
class attribute 430
data 4
datum 18
derived 5, 431
destructor 106
diagnostics 96
direct parent 177
documentation 95
empty subclass 189
field 18
generator 327
generic 330
hash-based 431
helper 150, 423
hierarchy 460
implemented by package 74
in other languages 439, 444, 450, 454
instance 18
interaction 109
intermediate 183
least-derived 360
method 4, 429, 460
mixin 175
module 89
name 77, 429
node 339
other terms for 18
parent 5, 431
persistent 418
regular expressions 145
specialization 18
strutcures 218
syntax summary 429
testing 189
unspecified features 16
variable 18
version 96
class attribute 4, 85
access to 196
internal use only 198
other terms for 18
ownership of 196
via object attribute 198
class method 4, 85
constructor 79
in other languages 440, 447, 450
other terms for 18
Class::ISA module 170, 201
Class::MethodMaker module 213, 222, 432, 439
inheritance 233
Class::Multimethods module 367, 385
last resort 382
pseudo-types 381
Class::Struct module 213, 431, 439
inheritance 219
classical music 193
classified lexical
See typed lexical 132
class-specific persistence 400
cloning before mutation 291
CLOS 19
close function 159, 257
closure 56, 95, 460
and anonymous subroutine 57
as encapsulation mechanism 298
as generic subroutine 329
implementing genericity 436
shared lexicals 58
closure-based object 434
coarse-grained persistence 17, 388, 397, 400, 408
code
collaborative 349
duplication 183
efficiency 276
expediency 293
extensive, hard to understand 187
forward-compatibility 196
generation 214, 392
intelligible 294
migration 267
rarely-used 297
reuse via cut-and-paste 8
run-time generation 329
scaling problems 296
structural patterns 327
test code 189
ugliness 276
CODE slot 60
code-like attribute 231
codons 250, 265
collision
detection 385
of inherited attribute names 186
colony organism 14
comic-book profanity 145
communication between objects 198
compactness of encoding schemes 392
comparison
coarse- vs fine-grained persistence 412
of multiple dispatch techniques 361, 385
string vs numeric 343
compile-time
checking of interface 170
checking of pseudo-hash accesses 132
complement operator 141
complex numbers 292
composition 460
Comprehensive Perl Archive Network 66
compression 180
compromises 147
consequences of dispatch resolution strategy 372
consistency 380
of multiple dispatch 367
constant 119
interpretation of 288
constant.pm module 99
constructor 78, 96, 429, 460
actions 98
and bless function 79
and inheritance 171
and securehashes 312
annoying need for 288
called as object method 125
called without arguments 103
calling 79
Class::MethodMaker 223
delegation from 431
failure of 96
for array-based class 122
for closure-based objects 298
for database object 395
for flyweight objects 304
for pseudo-hash-based objects 132
generating 213
generic 173
hierarchical calls 170
in other languages 439, 446, 451
incrementing global object count 86
long argument lists 101
multi-purpose 104
of persistent class 415
redefinition for persistence 418
reimplementing in derived class 219
reuse in derived class 193, 431
trivial 223
unique Perl behaviour 172
container datatypes 61
context
list 33
of subroutine call 33
scalar 23, 33
string, numerical, boolean 282, 434
void 33
control, (de-)centralized 349
convenience 316
conventions
always using constructor 79
constructor as duplicator 103
named arguments 102
prefixing attributes 188
undef on constructor failure 149
underscore means 78, 313
upper-case for constants 120
conversion
of constants 288
of exception to undef 149
of Roman numerals 286
of securehashes to hashes 321
operators 282, 294, 434
Convert::EBCDIC module 261
Conway, James and Sandra xviii
coordination 397, 412
copy
deep 390
operation 103
copyright 96
coral 14
cost 424
of deferred calculations 150
of dynamic dispatch table 366
of encapsulation 198
of multimethods 370
of multiple dispatch 356
of persistence 388
of securehashes 321
coupling 241
of package variables 47
CPAN 66, 96
CPAN Search website 66
home page 66
installing modules 67
mirror sites 66
mystical Multiplex Dispatcher 66
the WAIT search engine 66
CPAN.pm module 67
configuration 67
crash vs persistence 17
CREATE statement (SQL) 395
creation
of objects 76, 96, 430
of table in database 395
Cretaceous era 13
cross-breeding 267
cross-indexing 248
cross-product 293
crypt function 136
cultural
considerations 138
solution 188
cumulative effects of inheritance 178
curly braces 41
cursing 64
cursor, of hash 124
cut-and-paste
for code reuse 8
vs modules 51
CyberGeek 179
D
dancers 349
data
access vs representation 14
encapsulated 82
execution-specific 389
internal 82
loss 388, 404
on disk 250
data integrity 405
and persistence 17
data member 18
data structure
circular 108
encoding/decoding 390
for object house-keeping 399
misbehaving 392
nested 405, 427
Data::Dumper module 182, 391, 405, 410, 418, 424
purity 411
database 17
as persistent hash 400
choice of 401
handle 395
MLDBM module 418
overheads and complexities, avoiding 408
relational 394
simple 393
DB_File module 393, 419
DBD:: modules 394
DbFramework module 427
DBI module 394, 427
deadly sins, seven 22
debugging 297, 306
bit-strings 141
caller function 35
Data::Dumper 392
dynamic typing vs compile-time checking 328
hunt-and-destroy 183
multimethods 384
scalar assignments 242
securehashes 320
declarative
code 157
initialization 298
persistence 428
decoupling 14, 267, 460
of persistence mechanism 411
default
arguments 102
configuration for CPAN.pm module 67
interpolation into hash 161
multimethod variant 378
via undef 31
deferred feature 12, 18
deferring computation 150
delegation 183, 195, 349, 418, 460
from constructor 431
from tree to root node 338
of construction 199
of methods 230, 432
delegation on failure 193
delete function 244
dependency of child class on parent 187
depth-first
ancestor list 363
method dispatch 368, 431
searching inheritance hierarchy 171
dereferencing scalars 137
derivation 18
derived class 5, 431, 460
Dˇsarmˇnien, Fran¨ois xviii
design
critical importance of 196
of regular expression class 147
Design Patterns 326
DESTROY 430
destructor 106, 430, 460
and autoloading 112
and circular data structures 110
and inheritance 176
as the reason for an object's existence 423
cascade of calls 110
closing interprocess pipes 163
for tied array 250
for tied filehandle 257
for tied hash 244
for tied scalar 238
from base class 176
hierarchical calls 170
in other languages 446, 451
of helper class 424
reblessing 177
detecting mutation 398
diagnostics 89
documenting 96
diamond operator 166
dir 31
direct
manipulation of objects 276
parent 177
directory listing 31
disambiguation, of multiple dispatch 378
discipline 188, 297
discrepancies in multiple dispatch 384
disillusionment 438
disk access costs for persistence 17
dispatch
of destructor 176
of methods 170
re-dispatch 356
dispatch mechanism 351
extensible 363
in other languages 440
Perl's 379
predictability 361
dispatch resolution 368, 461
example 370
dispatch table 358, 385, 461
dynamic 363
initialization order 359
DIXIT 291
Dlugosz, John xviii
DNA 250, 265
do function 393
do what I mean 324
doctor 203
documentation 70, 95
inadequate 297
Dominus, Mark-Jason xviii, 71, 335, 455
door handles 84
DOS command 56
dot-product 293
double colon 44
doublethink 291
downloading CPAN modules 67
dragon slaying 66
driver, DBD::Oracle 395
dual constructor trick 232, 233
duality 291
duplication, eliminating 183
duplicators 103
dwarfs, seven 22
dynamic dispatch table 363
Class::Multimethod, automation of 367
dynamic typing 16, 22
in other languages 439
vs genericity 328
E
each function 27, 123, 244, 309, 315
EBCDIC to ASCII 261
efficiency 241, 280, 297, 416, 424
of &AUTOLOAD 93
ego 16
Eiffel xii, 19, 309, 454, 467
elegance vs obscurity 150
elimination of duplication 183
embedded object 218
emergent
behaviour 350
system 349, 461
empty argument list, omitting 29
empty subclass test 189
emulation of dispatch mechanism 178
encapsulating subroutine 298
encapsulation 2, 18, 59, 201, 296, 434, 461
"by good manners" 82, 296
and procedural programming 14
and qualified array constants 122
enforced 302
in other languages 440, 446, 451, 456
non-enforcement in Perl 82
of class attributes 86, 298
of creation in constructor 79
of I/O 159
of multiple dispatch mechanism 359
of paged filehandle 160
of regular expressions 145
private attribute 309
protected attribute 309
protecting polymorphism 301
public attribute 309
strong 5, 299
unenforced 201
varying strengths 309
via closures 297
via scalars 302
vs pseudo-hashes 192
weak 5
within a tied variable 243
encoding 17, 389, 461
entire objects 405
in Perl 391
objects controlling their own 400
of objects 399
serialization 412, 423
simultaneously 411
encryption 136
key 227
END block 398, 404, 410, 418, 423
end-of-file 159
enforced encapsulation 296
England 367
entry 26
declaration in securehashes 312
non-existent 128
of hash as database record 394
used for two purposes 186
environment variables 96
eof function 257
epitaph 106
equivalence, logical 306
errata 71
error
logical 83
resynchronization after 157
essentials of object orientation 2
eternal life 57
etiquette 315
eval function 340, 347
and Data::Dumper 392, 399, 408
and genericity 437
as code generator 329, 334
to protect constructor 148
evaluation
of persistence techniques 412, 427
event 18
classes 353
handling 385
loop 353, 359, 368, 380
evil half-brother 17
examples
&analyse_network 110
&call 43
&catalyze 35
&checked_inverse 30
&cyclic_incr 33
&hop_along 57
&initial_sample 35
&insensitive_less_than 36
&insert 43
&listdir 31, 34
&lock and &unlock 59
&make_array_ref 48
&make_sequence 30
&next_cyclic 33
&print_recipes 47
Bit::String 138
Bug 74, 214, 222
CD::Music 80, 120, 132, 193, 220, 233
Chemical/Medicine 317
Color 322
Contact and Contact::Persistent 401
CountFreezings 400
database class 293
Database::Access: 53
DayOfTheWeek 281
DNA::Sequence 265
Employee 226
encoding blessed objects 398
Encryption::Key 227
Filtered filehandle 259
generic tree class 336
Genome::Array 250
graphical user interface 353
Heap class 346
Image class 232
Incremental 239
Insensitive::Hash 245
IO::Filter 268
IO::Filtered 270
IO::Pager 160, 164
Iterator 151
Lexer class 205
Limited_Transceiver 190
List 231, 328
multiple dispatch failure 376
multiple dispatch resolution 370
object-oriented techniques 418
Password 136
PerlGuru 168
persistent contact information 418
Personal_Details 225
pretty-printer 157
Projectile 119
QuotedMessage 183
reference 449
relational database 395
Robot package 55
serialization 390
Settable/Collection 186, 316
single vs multiple dispatch 373
Soldier 298, 302
SortedHash 263
stringification 381, 383
the_Marquis_of_Queensbury_rules 60
Track module 241
tracked scalars 264
Transceiver 128
Truck 186, 233
UNIVERSAL &debug method 182
where to find xv
exception 83, 92, 122, 185, 281, 314, 318, 325, 338, 340, 359, 362, 370, 377, 410, 461
as argument default 102
for dispatch failure 12
in other languages 442, 452
expectation 293
expediency 280, 293
explicit method definition vs &AUTOLOAD 92
explosion, disarming 340
exponentiation 279
Exporter module 55, 89, 408
exporting from object-oriented modules 89
external representation 17
extraction
of persistent data 394
of variable names 403
F
factoring out shared code 12
fallability 248
fall-back
for polymorphism failure 11
strategy 204
fallback pseudo-operator 281
familiarity 136
fascism
compile-time errors 344
linguistic 236
fastidiousness 96
fatal signals 405
Fates 46
Fcntl module 393, 402
feature 18
feature set 18
feedback to pager 163
field 18, 130
donation 191
of a pseudo-hash 132
fields.pm module 130, 190, 309, 439
file
as object 413
flat 393, 408
mapping 416
name 408
permissions 414
filehandle 60, 159, 253, 414
memory mapping 417
object-oriented 268
tied 256, 268
fileno function 257
fill in the blanks 16
fine-grained persistence 17, 388, 412
FinePersistence module 423
finite state machine 108
FireTruck class 5
flag
indicating reversed operands 279
persistent bit-strings 414
flag-like attributes 226
flat files 393
flattening for data serialization 389
flattening of lists 24
flexibility 118, 296, 321, 330, 400
floating-point
constants 288
numbers 276
flock of birds 349
flyweight pattern 302, 435, 461
foresight 195
fork 162
forking open 162
format 60
formatting code 157
forward-compatibility 196
forwarded method 229
fragmentation of generic class 334
freeze 388, 390, 391, 394
FreezeThaw module 391, 418
and UNIVERSAL package 400
Freidl, Jeffrey 69
friendly warning 249
frugality 391
fully-qualified
method name 173
package variable names 45
functionality, inherited vs defined 183
functions 24
future-proof code 88
G
garbage-collection
in other languages 439, 444, 449, 454
gcc 153
GDBM_File module 394
GDP, China vs USA 276
genealogy 204
generation
code 329
of code 214, 392
of consistent unique identity 388
of dispatch table 368
generator subroutine 57
generic
"maximum" function 29
behaviour of abstract method 12
handler 368
method 16, 18, 418
name of parent class 183
peristence 412
persistence 424
subroutine 327, 426
type 327
generic class 16, 330
fragmentation of 334
other terms for 18
generic module 18
generic package 18
genericity 15, 327, 436
in other languages 444, 457
the point of 339
vs abstraction 327
genes, dominant 372
genetic information 250
Genome::Array class 414
gensym 162, 253, 260, 268, 415
getc function 257
get-or-set accessor 224
gigabytes of data 250
global accessibility, badness of 4
glossary 459
glue 21
gods, Ancient Greek 46
good
manners 201
sense 186
gory details 13, 68, 400, 417
Gosling, James 449
goto & 264
goto_& 264
G?vert, Norbert 66
granularity of persistence 17
graphical user interface 351
graphics package 292
grep function 284
grouping of attributes
logical 225
physical 227
GUI 352
gurus xiii, 71
H
h2xs 53
hack 66
hand-crafted
multiple dispatch 367
operator implementations 281
Handel, George 292
handle
database handle 395
handler 18
for multiply dispatched methods 358
generic 368
more general 360
overlap of coverage 359
signal 410
specialized 359
hard-coded
&isa method 179
call to overloaded subroutine 353
class name 79
inheritance hierarchy information 176
method name 75
parent name in child method 183
persistence 400
regular expressions 144
hash 26
already generic 328
anonymous 41
as dispatch table 358
as normal basis for objects 81
as object 76, 296
attribute 228
autovivification 119
clearing 247
curly braces and stringification 26
entry as database record 394
extensibility 136
initialization 26
iteration 27, 151
key 283
keys conferring identity on values 389
lexical 402
look-up 130
multilevel 41
object-oriented iterator 123
of hashes 246
passing to subroutine by reference 42
persistent 400, 410
securehash 311
slice 28, 98
sorted 262
tied 243, 311, 393, 400, 418, 419
vs scalar objects 136
why commonly used as objects 118
hash entry 26
as object attribute 78
non-existent 119
headache 65, 309, 342
heap 344
insertion 347
heavier subtree 346
helper class 150, 423, 461
hench-person 5
here document 335
hexadecimal constants 288
hibernation 389
hiding data 18
hierarchy
all classes in 384
inheritance 11, 169
interacting with another 367
multimethod implementing behaviour of 379
of categories 5
of genericity 426
restructuring 343
Hollywood 237
homo sapiens
class hierarchy 177
vendax 27
house-keeping 198
data structures 399
HTML 153
human fallibility 3
hunt-and-destroy 183
hunt-and-replace 321
hybrid 132
I
-I Perl option 52
I/O 159, 256
buffering of 415
iambic pentameter 9
ID number 239
identification of target in &AUTOLOAD 93
identity 412, 461
of a flyweight object 306
of objects 427
persistent 388
idiom 96, 461
image 352
image-processing 352
immortality 412
implementation 3, 461
changes to 297
deviating from design 12
explicit, of operators 280
of multiple dispatch 372
of overloaded operators 280
of peristence 400
vs interface 13
implementation object 237, 238, 461
different type from tied variable 241
implementation subroutine 278
implicit class declaration 190
import 405, 410
important clients 297
inaccessible
chunks of memory 110
lexicals 57
inanimate objects 387
include directory 68
include path (@INC) 52
increment operator 241
index 22, 216
negative 23
of first element is zero 22
indirect object syntax 98, 163, 186, 222, 306
informal mechanisms 296
information
caching 399
hiding 3
ingredients of a persistent system 387
inherent ambiguity 318
inheritability 189
inheritance 5, 168, 418, 431, 462
advantages 414
and constructors 171
and encapsulation 196
and multimethod dispatch 362
and securehashes 316
and tie'able packages 262
between Class::Multimethod pseudo-types 382
borrowing behaviour 343
by peristent subclass 414
changing relationships 176
Class::MethodMaker 223, 233
Class::Struct 219
complex chains 6
consequences 363
distance 317, 370, 372, 462
empty subclass test 189
explicit 210
from someone else's class 187
hierarchy 169
implying type relationship 15
in other languages 441, 446, 451, 456
left-most parent 170
meaning of 169
of CD::Music class 193
of multimethod 359
of persistent classes 403
of pseudo-hashes 190
of UNIVERSAL package 182
other terms for 18
planning ahead 173
relationships 203, 355
triumph for 418
inheritance polymorphism 204, 462
in other languages 456
inherited class 462
INIT block 398
initialization 298
Class::Struct 219
extended 362
hierarchical 173
loop 195
of array 23
of array-based object 122
of dispatch table 358, 364
of hash 26
of perisistent variable 403
of persistent objects 419
separation from creation 96
sequence 173
injections 203
input parsing 153
insecure 82
insertion
into a heap 347
into binary search tree 340
inside-out class 152
installing a CPAN module 67
instance 3, 462
method 18
variable 18
Instant Justice 306
instant variables 45
instantiation 462
insulated approach 141
insulating client code from changes 230
int function 283
integer constants 288
integrity, of data 388, 405
interaction
between classes 109
between hierarchies 367
of objects 353
intercepting mutation 398
interface 3, 433, 462
affordance 83
changes to 405
Java concept 12
method-based 277
other terms for 18
reuse of 141
stability 14
tied variables 236
vs implementation 13
interface polymorphism 11, 204, 418, 462
in other languages 441, 451
internal 78
internal representation, translation of 17
interpolation
code generation 334
in generic persistence 426
of regular expressions 143
Interpolation module 335, 350
interprocess pipe 162
intravenous 290
intrinsic behaviour 236
intuitive operations 293
intuitiveness 101, 324
invoking object 75, 462
in other languages 440
IO:: modules 159
irate users 301
is-a 5, 363, 462
not bi-directional 6
transitive 5
ISBN 80
isolating the persistence mechanism 408
iteration
of hashes 27
of parent classes 184
iterator 244, 315
for objects of a class 306
object-oriented 123
sorted 262
Iterator class 124, 152
J
jamming 350
jargon 18, 56, 203
Java 70, 76, 314, 353, 398, 449, 467
John
Glenn or Kennedy? 44
Whorfin, Bigboote, Emdall, etc. 43
Johnson, Andrew 69
join function 140
JPEG 232, 378
judicious