Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

readonly::xs(3pm) [debian man page]

XS(3pm) 						User Contributed Perl Documentation						   XS(3pm)

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. perl v5.14.2 2011-11-15 XS(3pm)

Check Out this Related Man Page

Perl::Critic::Utils::PPI(3pm)				User Contributed Perl Documentation			     Perl::Critic::Utils::PPI(3pm)

NAME
Perl::Critic::Utils::PPI - Utility functions for dealing with PPI objects. DESCRIPTION
Provides classification of PPI::Elements. INTERFACE SUPPORT
This is considered to be a public module. Any changes to its interface will go through a deprecation cycle. IMPORTABLE SUBS
"is_ppi_expression_or_generic_statement( $element )" Answers whether the parameter is an expression or an undifferentiated statement. I.e. the parameter either is a PPI::Statement::Expression or the class of the parameter is PPI::Statement and not one of its subclasses other than "Expression". "is_ppi_generic_statement( $element )" Answers whether the parameter is an undifferentiated statement, i.e. the parameter is a PPI::Statement but not one of its subclasses. "is_ppi_statement_subclass( $element )" Answers whether the parameter is a specialized statement, i.e. the parameter is a PPI::Statement but the class of the parameter is not PPI::Statement. "is_ppi_simple_statement( $element )" Answers whether the parameter represents a simple statement, i.e. whether the parameter is a PPI::Statement, PPI::Statement::Break, PPI::Statement::Include, PPI::Statement::Null, PPI::Statement::Package, or PPI::Statement::Variable. "is_ppi_constant_element( $element )" Answers whether the parameter represents a constant value, i.e. whether the parameter is a PPI::Token::Number, PPI::Token::Quote::Literal, PPI::Token::Quote::Single, or PPI::Token::QuoteLike::Words, or is a PPI::Token::Quote::Double or PPI::Token::Quote::Interpolate which does not in fact contain any interpolated variables. This subroutine does not interpret any form of here document as a constant value, and may not until PPI::Token::HereDoc acquires the relevant portions of the PPI::Token::Quote interface. This subroutine also does not interpret entities created by the Readonly module or the constant pragma as constants, because the infrastructure to detect these appears not to be present, and the author of this subroutine (not Mr. Shank or Mr. Thalhammer) lacks the knowledge/expertise/gumption to put it in place. "is_subroutine_declaration( $element )" Is the parameter a subroutine declaration, named or not? "is_in_subroutine( $element )" Is the parameter a subroutine or inside one? "get_constant_name_element_from_declaring_statement($statement)" This subroutine is deprecated. You should use "get_constant_name_elements_from_declaring_statement()" in PPIx::Utilities::Statement instead. Given a PPI::Statement, if the statement is a "use constant" or Readonly declaration statement, return the name of the thing being defined. Given use constant 1.16 FOO => 'bar'; this will return "FOO". Similarly, given Readonly::Hash my %FOO => ( bar => 'baz' ); this will return "%FOO". Caveat: in the case where multiple constants are declared using the same "use constant" statement (e.g. "use constant { FOO => 1, BAR => 2 };", this subroutine will return the declaring PPI::Structure::Constructor. In the case of "use constant 1.16 { FOO => 1, BAR => 2 };" it may return a PPI::Structure::Block instead of a PPI::Structure::Constructor, due to a parse error in PPI. "get_next_element_in_same_simple_statement( $element )" Given a PPI::Element, this subroutine returns the next element in the same simple statement as defined by is_ppi_simple_statement(). If no next element can be found, this subroutine simply returns. If the $element is undefined or unblessed, we simply return. If the $element satisfies "is_ppi_simple_statement()", we return, unless it has a parent which is a PPI::Structure::List. If the $element is the last significant element in its PPI::Node, we replace it with its parent and iterate again. Otherwise, we return "$element->snext_sibling()". "get_previous_module_used_on_same_line( $element )" Given a PPI::Element, returns the PPI::Element representing the name of the module included by the previous "use" or "require" on the same line as the $element. If none is found, simply returns. For example, with the line use version; our $VERSION = ...; given the PPI::Token::Symbol instance for $VERSION, this will return "version". If the given element is in a "use" or <require>, the return is from the previous "use" or "require" on the line, if any. AUTHOR
Elliot Shank <perl@galumph.com> COPYRIGHT
Copyright (c) 2007-2011 Elliot Shank. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module. perl v5.14.2 2012-06-07 Perl::Critic::Utils::PPI(3pm)
Man Page