diff options
author | Perl 5 Porters <perl5-porters@africa.nicoh.com> | 1997-04-07 00:00:00 +0000 |
---|---|---|
committer | Chip Salzenberg <chip@atlantic.net> | 1997-04-07 00:00:00 +0000 |
commit | 8cc95fdbe3687330bd987cea170494b4cd263d90 (patch) | |
tree | e3a830736fef94663b44fc7cf30f0755de3e09c5 /pod/perltoot.pod | |
parent | 1061146bbd7c9a40c4288ec63427c8327cc0d5fa (diff) | |
download | perl-8cc95fdbe3687330bd987cea170494b4cd263d90.tar.gz |
[inseparable changes from match from perl-5.003_97b to perl-5.003_97c]
BUILD PROCESS
Subject: Fix syntax error in Configure comment(!)
From: Chip Salzenberg <chip@perl.com>
Files: Configure
Subject: For Solaris, if -DDEBUGGING, default to '-KPIC', not '-Kpic'
From: Chip Salzenberg <chip@perl.com>
Files: Configure
Subject: Fix usage of dXSUB_SYS, esp. in ExtUtils::Miniperl
From: Chip Salzenberg <chip@perl.com>
Files: dosish.h minimod.pl os2/os2ish.h plan9/plan9ish.h vms/vmsish.h
CORE LANGUAGE CHANGES
Subject: Refine setgroups() behavior of C<$)>
From: Chip Salzenberg <chip@perl.com>
Files: mg.c pod/perldelta.pod pod/perlvar.pod
Subject: Forbid -[Mm] on #! line
From: Chip Salzenberg <chip@perl.com>
Files: pod/perldelta.pod pod/perldiag.pod toke.c
CORE PORTABILITY
Subject: Special mkdir() for VMS
Date: Tue, 08 Apr 1997 12:33:56 -0400 (EDT)
From: Charles Bailey <bailey@hmivax.humgen.upenn.edu>
Files: dosish.h lib/ExtUtils/MM_Unix.pm lib/File/Path.pm os2/os2ish.h plan9/plan9ish.h pp_sys.c unixish.h vms/vms.c vms/vmsish.h
Msg-ID: 01IHGOXN6MZM0004K3@hmivax.humgen.upenn.edu
(applied based on p5p patch as commit ebec1d4b2ca9c08d24035a369c7aa782aa058e66)
DOCUMENTATION
Subject: IO::Socket doc fix
Date: Tue, 08 Apr 1997 15:30:43 -0400
From: Roderick Schertler <roderick@argon.org>
Files: ext/IO/lib/IO/Socket.pm
Msg-ID: 28383.860527843@eeyore.ibcinc.com
(applied based on p5p patch as commit 4a51304ce091cb6d1ccc9f25e11753bd7d985b32)
LIBRARY AND EXTENSIONS
Subject: Replace Class::Template with improved Class::Struct
From: Jim Miner <jfm@winternet.com>
Files: MANIFEST lib/Class/Struct.pm lib/Class/Template.pm lib/File/stat.pm lib/Net/hostent.pm lib/Net/netent.pm lib/Net/protoent.pm lib/Net/servent.pm lib/Time/gmtime.pm lib/Time/localtime.pm lib/Time/tm.pm lib/User/grent.pm lib/User/pwent.pm pod/perldelta.pod pod/perlfaq7.pod pod/perlmod.pod pod/perltoot.pod
Subject: MakeMaker pathname patch
Date: Wed, 9 Apr 1997 20:08:23 +0100
From: Nick Ing-Simmons <nik@tiuk.ti.com>
Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
Msg-ID: 199704091908.UAA00877@ni-s.u-net.com
(applied based on p5p patch as commit 9cbbd68ff8edc7de96e3471de49538d0b2b98173)
Subject: Fix configuration of new socket
From: Chip Salzenberg <chip@perl.com>
Files: ext/IO/lib/IO/Socket.pm
Diffstat (limited to 'pod/perltoot.pod')
-rw-r--r-- | pod/perltoot.pod | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/pod/perltoot.pod b/pod/perltoot.pod index c23591245a..0c5b418c04 100644 --- a/pod/perltoot.pod +++ b/pod/perltoot.pod @@ -1467,12 +1467,12 @@ as detailed above. Perl programmers have responded to this by creating several different class construction classes. These metaclasses are classes that create other classes. A couple worth looking at are -Class::Template and Alias. These and other related metaclasses can be +Class::Struct and Alias. These and other related metaclasses can be found in the modules directory on CPAN. -=head2 Class::Template +=head2 Class::Struct -One of the older ones is Class::Template. In fact, its syntax and +One of the older ones is Class::Struct. In fact, its syntax and interface were sketched out long before perl5 even solidified into a real thing. What it does is provide you a way to "declare" a class as having objects whose fields are of a specific type. The function @@ -1481,11 +1481,11 @@ structures or records are not base types in Perl, each time you want to create a class to provide a record-like data object, you yourself have to define a new() method, plus separate data-access methods for each of that record's fields. You'll quickly become bored with this process. -The Class::Template::struct() function alleviates this tedium. +The Class::Struct::struct() function alleviates this tedium. Here's a simple example of using it: - use Class::Template qw(struct); + use Class::Struct qw(struct); use Jobbie; # user-defined; see below struct 'Fred' => { @@ -1520,7 +1520,7 @@ act like structs in the C sense. printf "perl.com's real name is %s, address %s\n", $h->name, inet_ntoa($h->addr); -Here's how to do this using the Class::Template module. +Here's how to do this using the Class::Struct module. The crux is going to be this call: struct 'Net::hostent' => [ # note bracket @@ -1544,7 +1544,7 @@ We could also have implemented our object this way: addr_list => '@', }; -and then Class::Template would have used an anonymous hash as the object +and then Class::Struct would have used an anonymous hash as the object type, instead of an anonymous array. The array is faster and smaller, but the hash works out better if you eventually want to do inheritance. Since for this struct-like object we aren't planning on inheritance, @@ -1557,8 +1557,7 @@ Here's the whole implementation: BEGIN { use Exporter (); - use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - @ISA = qw(Exporter); + use vars qw(@EXPORT @EXPORT_OK %EXPORT_TAGS); @EXPORT = qw(gethostbyname gethostbyaddr gethost); @EXPORT_OK = qw( $h_name @h_aliases @@ -1569,7 +1568,10 @@ Here's the whole implementation: } use vars @EXPORT_OK; - use Class::Template qw(struct); + # Class::Struct forbids use of @ISA + sub import { goto &Exporter::import } + + use Class::Struct qw(struct); struct 'Net::hostent' => [ name => '$', aliases => '@', @@ -1582,7 +1584,7 @@ Here's the whole implementation: sub populate (@) { return unless @_; - my $hob = new(); # Class::Template made this! + my $hob = new(); # Class::Struct made this! $h_name = $hob->[0] = $_[0]; @h_aliases = @{ $hob->[1] } = split ' ', $_[1]; $h_addrtype = $hob->[2] = $_[2]; @@ -1615,9 +1617,10 @@ Here's the whole implementation: We've snuck in quite a fair bit of other concepts besides just dynamic class creation, like overriding core functions, import/export bits, -function prototyping, and short-cut function call via C<&whatever>. -These all mostly make sense from the perspective of a traditional module, -but as you can see, we can also use them in an object module. +function prototyping, short-cut function call via C<&whatever>, and +function replacement with C<goto &whatever>. These all mostly make +sense from the perspective of a traditional module, but as you can see, +we can also use them in an object module. You can look at other object-based, struct-like overrides of core functions in the 5.004 release of Perl in File::stat, Net::hostent, @@ -1695,7 +1698,7 @@ they're still considered global variables with temporary values, just as with any other local(). It would be nice to combine Alias with -something like Class::Template or Class::MethodMaker. +something like Class::Struct or Class::MethodMaker. =head2 NOTES |