File Coverage

blib/lib/Perl/ToPerl6/Transformer/BasicTypes/Integers/RewriteOctalNumbers.pm
Criterion Covered Total %
statement 19 29 65.5
branch n/a
condition n/a
subroutine 8 11 72.7
pod 3 5 60.0
total 30 45 66.6


line stmt bran cond sub pod time code
1             package Perl::ToPerl6::Transformer::BasicTypes::Integers::RewriteOctalNumbers;
2              
3 1     1   769 use 5.006001;
  1         4  
4 1     1   5 use strict;
  1         1  
  1         18  
5 1     1   4 use warnings;
  1         2  
  1         25  
6 1     1   4 use Readonly;
  1         2  
  1         41  
7              
8 1     1   5 use Perl::ToPerl6::Utils qw{ :characters :severities };
  1         1  
  1         53  
9              
10 1     1   289 use base 'Perl::ToPerl6::Transformer';
  1         2  
  1         277  
11              
12             #-----------------------------------------------------------------------------
13              
14             Readonly::Scalar my $DESC => q{Transforms 0o11 and 011 into :8<11>};
15             Readonly::Scalar my $EXPL => q{Perl6 octal integers look like :8<0011>};
16              
17             #-----------------------------------------------------------------------------
18              
19 2     2 0 7 sub supported_parameters { return () }
20 1     1 1 4 sub default_necessity { return $NECESSITY_HIGHEST }
21 0     0 1   sub default_themes { return qw( core ) }
22 0     0 1   sub applies_to { return 'PPI::Token::Number::Octal' }
23              
24             #-----------------------------------------------------------------------------
25              
26             #
27             # 0123 --> :8<0123>
28             # 0123_4567 --> :8<0123_4567>
29             #
30             sub transform {
31 0     0 0   my ($self, $elem, $doc) = @_;
32              
33 0           my $old_content = $elem->content;
34              
35             #
36             # Remove leading '0' and optional leading underscore
37             #
38 0           $old_content =~ s{^0[_]?}{}i;
39 0           $old_content =~ s{[_]$}{};
40 0           $old_content =~ s{[_]+}{_}g;
41              
42 0           my $new_content = ':8<' . $old_content . '>';
43 0           $elem->set_content( $new_content );
44              
45 0           return $self->transformation( $DESC, $EXPL, $elem );
46             }
47              
48             1;
49              
50             #-----------------------------------------------------------------------------
51              
52             __END__
53              
54             =pod
55              
56             =head1 NAME
57              
58             Perl::ToPerl6::Transformer::BasicTypes::Integers::RewriteOctalNumbers - Format 0o0123 properly
59              
60              
61             =head1 AFFILIATION
62              
63             This Transformer is part of the core L<Perl::ToPerl6|Perl::ToPerl6>
64             distribution.
65              
66              
67             =head1 DESCRIPTION
68              
69             Perl6 octal literals have the format ':8<01_67>'. Perl6 enforces the rule that separators must occur between digits, and only one separator character at a time:
70              
71             017 -> :8<17>
72             00167 -> :8<0167>
73             0010_67 -> :8<010_67>
74             0_010__67_ -> :8<010_67>
75              
76             Transforms octal numbers outside of comments, heredocs, strings and POD.
77             =head1 CONFIGURATION
78              
79             This Transformer is not configurable except for the standard options.
80              
81             =head1 AUTHOR
82              
83             Jeffrey Goff <drforr@pobox.com>
84              
85             =head1 COPYRIGHT
86              
87             Copyright (c) 2015 Jeffrey Goff
88              
89             This program is free software; you can redistribute it and/or modify
90             it under the same terms as Perl itself.
91              
92             =cut
93              
94             ##############################################################################
95             # Local Variables:
96             # mode: cperl
97             # cperl-indent-level: 4
98             # fill-column: 78
99             # indent-tabs-mode: nil
100             # c-indentation-style: bsd
101             # End:
102             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :