NAME¶
Readonly::XS - Companion module for Readonly.pm, to speed up read-only scalar
variables.
VERSION¶
This document describes version 1.04 of Readonly::XS, December 6, 2005.
SYNOPSIS¶
Install this module, but do not use it.
DESCRIPTION¶
The Readonly module (q.v.) is an effective way to create non-modifiable
variables. However, it's relatively slow.
The reason it's slow is that is implements the read-only-ness of variables via
tied objects. This mechanism is inherently slow. Perl simply has to do a lot
of work under the hood to make tied variables work.
This module corrects the speed problem, at least with respect to scalar
variables. When Readonly::XS is installed, Readonly uses it to access the
internals of scalar variables. Instead of creating a scalar variable object
and tying it, Readonly simply flips the SvREADONLY bit in the scalar's FLAGS
structure.
Readonly arrays and hashes are not sped up by this, since the SvREADONLY flag
only works for scalars. Arrays and hashes always use the tie interface.
Why implement this as a separate module? Because not everyone can use XS. Not
everyone has a C compiler. Also, installations with a statically-linked perl
may not want to recompile their perl binary just for this module. Rather than
render Readonly.pm useless for
these people, the XS portion was put into a separate module.
Programs that you write do not need to know whether Readonly::XS is installed or
not. They should just "use Readonly" and let Readonly worry about
whether or not it can use XS. If the Readonly::XS is present, Readonly will be
faster. If not, it won't. Either way, it will still work, and your code will
not have to change.
Your program can check whether Readonly.pm is using XS or not by examining the
$Readonly::XSokay variable. It will be true if the XS module was found and is
being used. Please do not change this variable.
EXPORTS¶
None.
SEE ALSO¶
Readonly.pm
AUTHOR / COPYRIGHT¶
Eric Roode, roode@cpan.org
Copyright (c) 2003-2005 by Eric J. Roode. All Rights Reserved. This module is
free software; you can redistribute it and/or modify it under the same terms
as Perl itself.
To avoid my spam filter, please include "Perl", "module", or
this module's name in the message's subject line, and/or GPG-sign your
message.