If a typed lexical variable holding a reference is used to access a
hash element and the %FIELDS hash of the given type exists, then the
operation is turned into an array access at compile time. The %FIELDS
-hash map from hash element names to the array indices. If the hash
+hash maps from hash element names to the array indices. If the hash
element is not present in the %FIELDS hash, then a compile-time error
is signaled.
from base classes and the 'fields' pragma adds new fields. Field
names that start with an underscore character are made private to a
class and are not visible to subclasses. Inherited fields can be
-overridden but will generate a warning if used together with the -w
-option.
+overridden but will generate a warning if used together with the C<-w>
+switch.
The effect of all this is that you can have objects with named fields
-which are as compact and as fast arrays too access. This only works
+which are as compact and as fast arrays to access. This only works
as long as the objects are accessed through properly typed variables.
For untyped access to work you have to make sure that a reference to
the proper %FIELDS hash is assigned to the 0'th element of the array
-object (so that the objects can be treated like an AVHV). A
+object (so that the objects can be treated like an pseudo-hash). A
constructor like this does the job:
sub new
{
my $class = shift;
no strict 'refs';
- my $self = bless [\%{"$class\::FIELDS"], $class;
+ my $self = bless [\%{"$class\::FIELDS"}], $class;
$self;
}
=head1 SEE ALSO
L<base>,
-I<description of AVHVs>
+L<perlref/Pseudo-hashes: Using an array as a hash>
=cut