Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / PPI / Token / Number / Octal.pm
CommitLineData
3fea05b9 1package PPI::Token::Number::Octal;
2
3=pod
4
5=head1 NAME
6
7PPI::Token::Number::Octal - Token class for a binary number
8
9=head1 SYNOPSIS
10
11 $n = 0777; # octal integer
12
13=head1 INHERITANCE
14
15 PPI::Token::Number::Octal
16 isa PPI::Token::Number
17 isa PPI::Token
18 isa PPI::Element
19
20=head1 DESCRIPTION
21
22The C<PPI::Token::Number::Octal> class is used for tokens that
23represent base-8 numbers.
24
25=head1 METHODS
26
27=cut
28
29use strict;
30use PPI::Token::Number ();
31
32use vars qw{$VERSION @ISA};
33BEGIN {
34 $VERSION = '1.206';
35 @ISA = 'PPI::Token::Number';
36}
37
38=pod
39
40=head2 base
41
42Returns the base for the number: 8.
43
44=cut
45
46sub base () { 8 }
47
48=pod
49
50=head2 literal
51
52Return the numeric value of this token.
53
54=cut
55
56sub literal {
57 my $self = shift;
58 return if $self->{_error};
59 my $str = $self->_literal;
60 my $neg = $str =~ s/^\-//;
61 my $val = oct $str;
62 return $neg ? -$val : $val;
63}
64
65
66
67
68
69#####################################################################
70# Tokenizer Methods
71
72sub __TOKENIZER__on_char {
73 my $class = shift;
74 my $t = shift;
75 my $char = substr( $t->{line}, $t->{line_cursor}, 1 );
76
77 # Allow underscores straight through
78 return 1 if $char eq '_';
79
80 if ( $char =~ /\d/ ) {
81 # You cannot have 8s and 9s on octals
82 if ( $char eq '8' or $char eq '9' ) {
83 $t->{token}->{_error} = "Illegal character in octal number '$char'";
84 }
85 return 1;
86 }
87
88 # Doesn't fit a special case, or is after the end of the token
89 # End of token.
90 $t->_finalize_token->__TOKENIZER__on_char( $t );
91}
92
931;
94
95=pod
96
97=head1 SUPPORT
98
99See the L<support section|PPI/SUPPORT> in the main module.
100
101=head1 AUTHOR
102
103Chris Dolan E<lt>cdolan@cpan.orgE<gt>
104
105=head1 COPYRIGHT
106
107Copyright 2006 Chris Dolan.
108
109This program is free software; you can redistribute
110it and/or modify it under the same terms as Perl itself.
111
112The full text of the license can be found in the
113LICENSE file included with this module.
114
115=cut