PPIx::Regexp::Token::GroupType::Code - Represent one of the embedded code indicators


PPIx-Regexp documentation Contained in the PPIx-Regexp distribution.

Index


Code Index:

NAME

Top

PPIx::Regexp::Token::GroupType::Code - Represent one of the embedded code indicators

SYNOPSIS

Top

 use PPIx::Regexp::Dumper;
 PPIx::Regexp::Dumper->new( 'qr{(?{print "hello world!\n")}smx' )
     ->print();

INHERITANCE

Top

PPIx::Regexp::Token::GroupType::Code is a PPIx::Regexp::Token::GroupType.

PPIx::Regexp::Token::GroupType::Code has no descendants.

DESCRIPTION

Top

This method represents one of the embedded code indicators, either '?' or '??', in the zero-width assertion

 (?{ print "Hello, world!\n" })

or the old-style deferred expression syntax

 my $foo;
 $foo = qr{ foo (??{ $foo }) }smx;

METHODS

Top

This class provides no public methods beyond those provided by its superclass.

SUPPORT

Top

Support is by the author. Please file bug reports at http://rt.cpan.org, or in electronic mail to the author.

AUTHOR

Top

Thomas R. Wyant, III wyant at cpan dot org

COPYRIGHT AND LICENSE

Top


PPIx-Regexp documentation Contained in the PPIx-Regexp distribution.
package PPIx::Regexp::Token::GroupType::Code;

use strict;
use warnings;

use base qw{ PPIx::Regexp::Token::GroupType };

use PPIx::Regexp::Constant qw{ MINIMUM_PERL };

our $VERSION = '0.020';

# Return true if the token can be quantified, and false otherwise
# sub can_be_quantified { return };

{
    my %perl_version_introduced = (
	'?'	=> '5.005',
	'?p'	=> '5.005',	# Presumed. I can find no documentation.
	'??'	=> '5.006',
    );

    sub perl_version_introduced {
	my ( $self ) = @_;
	return $perl_version_introduced{ $self->content() } || '5.005';
    }

}

{

    my %perl_version_removed = (
	'?p'	=> '5.009005',
    );

    sub perl_version_removed {
	my ( $self ) = @_;
	return $perl_version_removed{ $self->content() };
    }
}

sub __PPIX_TOKENIZER__regexp {
    my ( $class, $tokenizer, $character ) = @_;

    # Recognize '?{', '??{', or '?p{', the latter deprecated in Perl
    # 5.6, and removed in 5.10. The extra escapes are because the
    # non-open-bracket characters may appear as delimiters to the
    # expression.
    if ( my $accept = $tokenizer->find_regexp(
	    qr{ \A \\? \? \\? [?p]? \{ }smx ) ) {

	--$accept;	# Don't want the curly bracket.

	# Code token comes after.
	$tokenizer->expect( 'PPIx::Regexp::Token::Code' );

	return $accept;
    }

    return;
}

1;

__END__

# ex: set textwidth=72 :