Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / PPI / Token / Number / Octal.pm
1 package PPI::Token::Number::Octal;
2
3 =pod
4
5 =head1 NAME
6
7 PPI::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
22 The C<PPI::Token::Number::Octal> class is used for tokens that
23 represent base-8 numbers.
24
25 =head1 METHODS
26
27 =cut
28
29 use strict;
30 use PPI::Token::Number ();
31
32 use vars qw{$VERSION @ISA};
33 BEGIN {
34         $VERSION = '1.206';
35         @ISA     = 'PPI::Token::Number';
36 }
37
38 =pod
39
40 =head2 base
41
42 Returns the base for the number: 8.
43
44 =cut
45
46 sub base () { 8 }
47
48 =pod
49
50 =head2 literal
51
52 Return the numeric value of this token.
53
54 =cut
55
56 sub 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
72 sub __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
93 1;
94
95 =pod
96
97 =head1 SUPPORT
98
99 See the L<support section|PPI/SUPPORT> in the main module.
100
101 =head1 AUTHOR
102
103 Chris Dolan E<lt>cdolan@cpan.orgE<gt>
104
105 =head1 COPYRIGHT
106
107 Copyright 2006 Chris Dolan.
108
109 This program is free software; you can redistribute
110 it and/or modify it under the same terms as Perl itself.
111
112 The full text of the license can be found in the
113 LICENSE file included with this module.
114
115 =cut