| PPI documentation | Contained in the PPI distribution. |
PPI::Token::Operator - Token class for operators
PPI::Token::Operator
isa PPI::Token
isa PPI::Element
# This is the list of valid operators ++ -- ** ! ~ + - =~ !~ * / % x << >> lt gt le ge cmp ~~ == != <=> . .. ... , & | ^ && || // ? : = += -= *= .= //= < > <= >= <> => -> and or dor not eq ne
All operators in PPI are created as PPI::Token::Operator objects,
including the ones that may superficially look like a PPI::Token::Word
object.
There are no additional methods beyond those provided by the parent PPI::Token and PPI::Element classes.
Got any ideas for methods? Submit a report to rt.cpan.org!
See the support section in the main module.
Adam Kennedy <adamk@cpan.org>
Copyright 2001 - 2011 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
| PPI documentation | Contained in the PPI distribution. |
package PPI::Token::Operator;
use strict; use PPI::Token (); use vars qw{$VERSION @ISA %OPERATOR}; BEGIN { $VERSION = '1.215'; @ISA = 'PPI::Token'; # Build the operator index ### NOTE - This is accessed several times explicitly ### in PPI::Token::Word. Do not rename this ### without also correcting them. %OPERATOR = map { $_ => 1 } ( qw{ -> ++ -- ** ! ~ + - =~ !~ * / % x . << >> < > <= >= lt gt le ge == != <=> eq ne cmp ~~ & | ^ && || // .. ... ? : = += -= *= .= /= //= => <> and or xor not }, ',' # Avoids "comma in qw{}" warning ); } ##################################################################### # Tokenizer Methods sub __TOKENIZER__on_char { my $t = $_[1]; my $char = substr( $t->{line}, $t->{line_cursor}, 1 ); # Are we still an operator if we add the next character my $content = $t->{token}->{content}; return 1 if $OPERATOR{ $content . $char }; # Handle the special case of a .1234 decimal number if ( $content eq '.' ) { if ( $char =~ /^[0-9]$/ ) { # This is a decimal number $t->{class} = $t->{token}->set_class('Number::Float'); return $t->{class}->__TOKENIZER__on_char( $t ); } } # Handle the special case if we might be a here-doc if ( $content eq '<<' ) { my $line = substr( $t->{line}, $t->{line_cursor} ); # Either <<FOO or << 'FOO' or <<\FOO ### Is the zero-width look-ahead assertion really ### supposed to be there? if ( $line =~ /^(?: (?!\d)\w | \s*['"`] | \\\w ) /x ) { # This is a here-doc. # Change the class and move to the HereDoc's own __TOKENIZER__on_char method. $t->{class} = $t->{token}->set_class('HereDoc'); return $t->{class}->__TOKENIZER__on_char( $t ); } } # Handle the special case of the null Readline if ( $content eq '<>' ) { $t->{class} = $t->{token}->set_class('QuoteLike::Readline'); } # Finalize normally $t->_finalize_token->__TOKENIZER__on_char( $t ); } 1;