File Coverage

blib/lib/RPerl/DataType/String.pm
Criterion Covered Total %
statement 47 75 62.6
branch 4 12 33.3
condition n/a
subroutine 14 20 70.0
pod 0 8 0.0
total 65 115 56.5


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::DataType::String;
3 9     9   3401 use strict;
  9         20  
  9         232  
4 9     9   41 use warnings;
  9         18  
  9         185  
5 9     9   43 use RPerl::AfterSubclass;
  9         16  
  9         1211  
6             our $VERSION = 0.010_000;
7              
8             # [[[ OO INHERITANCE ]]]
9 9     9   60 use parent qw(RPerl::DataType::Scalar);
  9         16  
  9         48  
10 9     9   533 use RPerl::DataType::Scalar;
  9         23  
  9         278  
11              
12             # [[[ CRITICS ]]]
13             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
14             ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
15              
16             # [[[ SUB-TYPES ]]]
17             # a string is 0 or more letters, digits, or other ASCII (Unicode???) symbols
18             package # hide from PAUSE indexing
19             string;
20 9     9   55 use strict;
  9         35  
  9         164  
21 9     9   47 use warnings;
  9         18  
  9         229  
22 9     9   44 use parent qw(RPerl::DataType::String);
  9         19  
  9         33  
23              
24             # [[[ PRE-DECLARED TYPES ]]]
25             package # hide from PAUSE indexing
26             boolean;
27             package # hide from PAUSE indexing
28             unsigned_integer;
29             package # hide from PAUSE indexing
30             integer;
31             package # hide from PAUSE indexing
32             number;
33             package # hide from PAUSE indexing
34             character;
35              
36             # [[[ SWITCH CONTEXT BACK TO PRIMARY PACKAGE ]]]
37             package RPerl::DataType::String;
38 9     9   614 use strict;
  9         16  
  9         150  
39 9     9   38 use warnings;
  9         16  
  9         231  
40              
41             # [[[ INCLUDES ]]]
42 9     9   44 use POSIX qw(floor);
  9         19  
  9         50  
43              
44             # DEV NOTE: do not put inside INIT{} block, because it will be "too late to run INIT block" in some cases, such as inside Catalyst
45             # DEV NOTE, CORRELATION #rp040: fix recursive dependencies of String.pm & HelperFunctions_cpp.pm, as triggered by ingy's Inline::create_config_file() system() call
46             # NEED REMOVE: this code no longer appears to be necessary?
47             #if (not ((exists $ARGV[0]) and (defined $ARGV[0]) and ((substr $ARGV[0], -7, 7) eq '_Inline'))) {
48             #if (0) {
49             # use RPerl::HelperFunctions_cpp; # main::RPerl_SvPOKp
50             # RPerl::HelperFunctions_cpp::cpp_load();
51             #}
52              
53             # [[[ EXPORTS ]]]
54 9     9   537 use Exporter 'import';
  9         22  
  9         5574  
55             our @EXPORT = qw(string_CHECK string_CHECKTRACE string_to_boolean string_to_unsigned_integer string_to_integer string_to_number string_to_character string_to_string);
56              
57             # [[[ TYPE CHECKING ]]]
58             #our void $string_CHECK = sub {
59             sub string_CHECK {
60 0     0 0 0 ( my $possible_string ) = @_;
61 0 0       0 if ( not( defined $possible_string ) ) {
62 0         0 croak(
63             "\nERROR EPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\nstring value expected but undefined/null value found,\ncroaking"
64             );
65             }
66 0 0       0 if ( not( main::RPerl_SvPOKp($possible_string) ) ) {
67 0         0 croak(
68             "\nERROR EPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\nstring value expected but non-string value found,\ncroaking"
69             );
70             }
71             }
72              
73             # DEV NOTE: avoid error for those packages which do NOT 'use RPerl', but instead do 'use RPerl::AfterSubclass' and 'use RPerl::Config' and 'use rperltypesconv' etc.
74             # "Undefined subroutine &RPerl::DataType::String::string_CHECKTRACE called at lib/RPerl/DataType/String.pm line XYZ [ in string_to_integer() below ]
75             #our void $string_CHECKTRACE = sub {
76             sub string_CHECKTRACE {
77 39     39 0 132 ( my $possible_string, my $variable_name, my $subroutine_name ) = @_;
78 39 100       132 if ( not( defined $possible_string ) ) {
79 4         71 croak(
80             "\nERROR EPV00, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\nstring value expected but undefined/null value found,\nin variable $variable_name from subroutine $subroutine_name,\ncroaking"
81             );
82             }
83 35 100       199 if ( not( main::RPerl_SvPOKp($possible_string) ) ) {
84 10         164 croak(
85             "\nERROR EPV01, TYPE-CHECKING MISMATCH, PERLOPS_PERLTYPES:\nstring value expected but non-string value found,\nin variable $variable_name from subroutine $subroutine_name,\ncroaking"
86             );
87             }
88             }
89              
90             # [[[ BOOLEANIFY ]]]
91             #our boolean $string_to_boolean = sub {
92             sub string_to_boolean {
93 0     0 0 0 (my string $input_string) = @_;
94             # string_CHECK($input_string);
95 0         0 string_CHECKTRACE( $input_string, '$input_string', 'string_to_boolean()' );
96 0         0 $input_string =~ s/_//gxms; # remove underscores to allow them in $input_string, fixes "Argument isn't numeric in multiplication (*)"
97 0 0       0 if (($input_string * 1) == 0) { return 0; }
  0         0  
98 0         0 else { return 1; }
99             }
100              
101             # [[[ UNSIGNED INTEGERIFY ]]]
102             #our integer $string_to_unsigned_integer = sub {
103             sub string_to_unsigned_integer {
104 0     0 0 0 (my string $input_string) = @_;
105             # string_CHECK($input_string);
106 0         0 string_CHECKTRACE( $input_string, '$input_string', 'string_to_unsigned_integer()' );
107 0         0 $input_string =~ s/_//gxms; # remove underscores to allow them in $input_string, fixes "Argument isn't numeric in multiplication (*)"
108 0         0 return (floor abs ($input_string * 1)) * 1;
109             }
110              
111             # [[[ INTEGERIFY ]]]
112             #our integer $string_to_integer = sub {
113             sub string_to_integer {
114 0     0 0 0 (my string $input_string) = @_;
115             # string_CHECK($input_string);
116 0         0 string_CHECKTRACE( $input_string, '$input_string', 'string_to_integer()' );
117             # DEV NOTE: must use double-casting via '* 1' below to avoid following errors
118             # ERROR EIV01, TYPE-CHECKING MISMATCH, CPPOPS_PERLTYPES & CPPOPS_CPPTYPES:
119             # integer value expected but non-integer value found,
120             # in variable input_sv from subroutine XS_unpack_integer(),
121 0         0 $input_string =~ s/_//gxms; # remove underscores to allow them in $input_string, fixes "Argument isn't numeric in multiplication (*)"
122             # return floor ($input_string * 1);
123 0         0 return (floor ($input_string * 1)) * 1;
124             }
125              
126             # [[[ NUMBERIFY ]]]
127             #our number $string_to_number = sub {
128             sub string_to_number {
129 0     0 0 0 (my string $input_string) = @_;
130             # string_CHECK($input_string);
131 0         0 string_CHECKTRACE( $input_string, '$input_string', 'string_to_number()' );
132 0         0 $input_string =~ s/_//gxms; # remove underscores to allow them in $input_string, fixes "Argument isn't numeric in multiplication (*)"
133 0         0 return $input_string * 1.0;
134             }
135              
136             # [[[ CHARACTERIFY ]]]
137             #our character $string_to_character = sub {
138             sub string_to_character {
139 0     0 0 0 (my string $input_string) = @_;
140             # string_CHECK($input_string);
141 0         0 string_CHECKTRACE( $input_string, '$input_string', 'string_to_character()' );
142 0 0       0 if ($input_string eq q{}) { return q{}; }
  0         0  
143 0         0 else { return substr $input_string, 0, 1; }
144             }
145              
146             # [[[ STRINGIFY ]]]
147             #our string $string_to_string = sub {
148             sub string_to_string {
149 29     29 0 29231 ( my string $input_string ) = @_;
150             # string_CHECK($input_string);
151 29         114 string_CHECKTRACE( $input_string, '$input_string', 'string_to_string()' );
152              
153             # RPerl::diag("in PERLOPS_PERLTYPES string_to_string(), received \$input_string =\n$input_string\n\n");
154 22         126 $input_string =~ s/\\/\\\\/gxms; # escape all back-slash \ characters with another back-slash \ character
155 22         84 $input_string =~ s/\'/\\\'/gxms; # escape all single-quote ' characters with a back-slash \ character
156 22         132 $input_string = "'$input_string'";
157              
158             # RPerl::diag("in PERLOPS_PERLTYPES string_to_string(), bottom of subroutine, returning possibly-modified \$input_string =\n$input_string\n\n");
159              
160 22         173 return ($input_string);
161             }
162              
163             # [[[ TYPE TESTING ]]]
164             our string $string__typetest0 = sub {
165             my string $retval = 'Spice PERLOPS_PERLTYPES';
166              
167             # RPerl::diag("in PERLOPS_PERLTYPES string__typetest0(), have \$retval = '$retval'\n");
168             return ($retval);
169             };
170             our string $string__typetest1 = sub {
171             ( my string $lucky_string ) = @_;
172             # string_CHECK($lucky_string);
173             string_CHECKTRACE( $lucky_string, '$lucky_string',
174             'string__typetest1()' );
175              
176             # RPerl::diag("in PERLOPS_PERLTYPES string__typetest1(), received \$lucky_string = '$lucky_string'\n");
177             return ( string_to_string($lucky_string) . ' PERLOPS_PERLTYPES' );
178             };
179              
180             1; # end of class