File Coverage

blib/lib/perl5i/0/SCALAR.pm
Criterion Covered Total %
statement 15 72 20.8
branch 0 30 0.0
condition 0 8 0.0
subroutine 5 21 23.8
pod n/a
total 20 131 15.2


line stmt bran cond sub pod time code
1             # vi: set ts=4 sw=4 ht=4 et :
2             package perl5i::0::SCALAR;
3 1     1   23 use 5.010;
  1         4  
  1         53  
4              
5 1     1   6 use strict;
  1         2  
  1         53  
6 1     1   6 use warnings;
  1         2  
  1         30  
7 1     1   6 use Carp;
  1         1  
  1         97  
8 1     1   1083 use autobox;
  1         13902  
  1         8  
9              
10             sub SCALAR::title_case {
11 0     0     my ($string) = @_;
12 0           $string =~ s/\b(\w)/\U$1/g;
13 0           return $string;
14             }
15              
16              
17             sub SCALAR::center {
18 0     0     my ($string, $size, $char) = @_;
19 0 0         carp "Use of uninitialized value for size in center()" if !defined $size;
20 0   0       $size //= 0;
21 0   0       $char //= ' ';
22              
23 0 0         if (length $char > 1) {
24 0           my $bad = $char;
25 0           $char = substr $char, 0, 1;
26 0           carp "'$bad' is longer than one character, using '$char' instead";
27             }
28              
29 0           my $len = length $string;
30              
31 0 0         return $string if $size <= $len;
32              
33 0           my $padlen = $size - $len;
34              
35             # pad right with half the remaining characters
36 0           my $rpad = int( $padlen / 2 );
37              
38             # bias the left padding to one more space, if $size - $len is odd
39 0           my $lpad = $padlen - $rpad;
40              
41 0           return $char x $lpad . $string . $char x $rpad;
42             }
43              
44              
45             sub SCALAR::ltrim {
46 0     0     my ($string,$trim_charset) = @_;
47 0 0         $trim_charset = '\s' unless defined $trim_charset;
48 0           my $re = qr/^[$trim_charset]*/;
49 0           $string =~ s/$re//;
50 0           return $string;
51             }
52              
53              
54             sub SCALAR::rtrim {
55 0     0     my ($string,$trim_charset) = @_;
56 0 0         $trim_charset = '\s' unless defined $trim_charset;
57 0           my $re = qr/[$trim_charset]*$/;
58 0           $string =~ s/$re//;
59 0           return $string;
60             }
61              
62              
63             sub SCALAR::trim {
64 0     0     my $charset = $_[1];
65              
66 0           return SCALAR::rtrim(SCALAR::ltrim($_[0], $charset), $charset);
67             }
68              
69              
70             sub SCALAR::wrap {
71 0     0     my ($string, %args) = @_;
72              
73 0   0       my $width = $args{width} // 76;
74 0   0       my $separator = $args{separator} // "\n";
75              
76 0 0         return $string if $width <= 0;
77              
78 0           require Text::Wrap;
79 0           local $Text::Wrap::separator = $separator;
80 0           local $Text::Wrap::columns = $width;
81              
82 0           return Text::Wrap::wrap('', '', $string);
83              
84             }
85              
86              
87             # untaint the scalar itself, not the reference
88             sub SCALAR::untaint {
89 0 0   0     return $_[0]->mo->untaint if ref $_[0];
90              
91 0           require Taint::Util;
92 0           Taint::Util::untaint($_[0]);
93 0           return 1;
94             }
95              
96              
97             # untaint the scalar itself, not the reference
98             sub SCALAR::taint {
99 0 0   0     return $_[0]->mo->taint if ref $_[0];
100              
101 0           require Taint::Util;
102 0           Taint::Util::taint($_[0]);
103 0           return 1;
104             }
105              
106             # Could use the version in Meta but this removes the need to check
107             # for overloading.
108             sub SCALAR::is_tainted {
109 0     0     require Taint::Util;
110 0 0         return ref $_[0] ? Taint::Util::tainted(${$_[0]}) : Taint::Util::tainted($_[0]);
  0            
111             }
112              
113              
114             sub SCALAR::load {
115 0     0     require Module::Load;
116 0           goto &Module::Load::load;
117             }
118              
119              
120             sub SCALAR::alias {
121 0 0   0     croak <
122             Due to limitations in autoboxing, scalars cannot be aliased.
123             Sorry. Use a scalar reference instead.
124             ERROR
125              
126 0           goto &DEFAULT::alias;
127             }
128              
129              
130             require POSIX;
131             *SCALAR::ceil = \&POSIX::ceil;
132             *SCALAR::floor = \&POSIX::floor;
133             *SCALAR::round_up = \&SCALAR::ceil;
134             *SCALAR::round_down = \&SCALAR::floor;
135             sub SCALAR::round {
136 0 0   0     abs($_[0] - int($_[0])) < 0.5 ? SCALAR::round_down($_[0])
137             : SCALAR::round_up($_[0])
138             }
139              
140             require Scalar::Util;
141             *SCALAR::is_number = \&Scalar::Util::looks_like_number;
142 0 0   0     sub SCALAR::is_positive { $_[0]->is_number && $_[0] > 0 }
143 0 0   0     sub SCALAR::is_negative { $_[0]->is_number && $_[0] < 0 }
144 0 0   0     sub SCALAR::is_integer { $_[0]->is_number && ((int($_[0]) - $_[0]) == 0) }
145             *SCALAR::is_int = \&SCALAR::is_integer;
146 0 0   0     sub SCALAR::is_decimal { $_[0]->is_number && ((int($_[0]) - $_[0]) != 0) }
147              
148             1;