File Coverage

blib/lib/Acme/CXW/vars/i.pm
Criterion Covered Total %
statement 39 51 76.4
branch 20 30 66.6
condition n/a
subroutine 2 2 100.0
pod n/a
total 61 83 73.4


line stmt bran cond sub pod time code
1             # I basically took vars.pm, and turned it into vars/i.pm
2            
3             package Acme::CXW::vars::i;
4            
5             $Acme::CXW::vars::i::VERSION = '1.02';
6            
7             # yuck
8             =for IT DOESN'T WORK nor is it important (try perl -Mstrict -Mwarnings=all -We"use vars q[$a];")
9             BEGIN {
10             eval q{
11             use warnings::register;
12             };
13             eval q{
14             sub warnings::enabled { return $^W; }
15             } if $@;
16             }
17             =cut
18            
19 1     1   67234 use strict qw(vars subs);
  1         3  
  1         565  
20            
21             sub import {
22 6 100   6   98 return if @_ < 2;
23 5         13 my( $pack, $var, @value ) = @_;
24 5         11 my $callpack = caller;
25            
26 5         9 my %stuff;
27            
28 5 100       13 if( not @value ){
29 1 50       3 if(ref $var ){
30 1         4 %stuff = @$var;
31             } else {
32 0         0 return;
33             }
34             } else {
35 4         11 %stuff = ( $var, [@value] );
36             }
37            
38 5         14 for my $k( keys %stuff ){
39 6         9 $var = $k;
40 6 100       17 if( ref $stuff{$k} eq 'ARRAY' ){
    50          
41 4         5 @value = @{ $stuff{$k} };
  4         10  
42             }
43             elsif( ref $stuff{$k} eq 'HASH' ){
44 0         0 @value = %{ $stuff{$k} };
  0         0  
45             }
46             else {
47 2         5 @value = $stuff{$k};
48             }
49            
50            
51 6 50       30 if( my( $ch, $sym ) = $var =~ /^([\$\@\%\*\&])(.+)/ ){
52 6 50       18 if( $sym =~ /\W/ ){
53             # time for a more-detailed check-up
54 0 0       0 if( $sym =~ /^\w+[[{].*[]}]$/ ){
    0          
55 0         0 require Carp;
56 0         0 Carp::croak("Can't declare individual elements of hash or array");
57             }
58             =for IT DOESN'T WORK nor is it important
59             elsif( warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z// ){#$!
60             require Carp;
61             Carp::carp("No need to declare built-in vars");
62             #warnings::warn("No need to declare built-in vars");
63             }
64             =cut
65             elsif( ($^H &= strict::bits('vars')) ){
66 0         0 require Carp;
67 0         0 Carp::croak("'$var' is not a valid variable name under strict vars");
68             }
69             }
70            
71 6 50       18 $sym = "${callpack}::$sym" unless $sym =~ /::/;
72            
73 6 100       18 if( $ch eq '$' ){
    100          
    100          
    100          
    50          
74 2         5 *{$sym} = \$$sym;
  2         6  
75 2         4 (${$sym}) = @value;
  2         243  
76             }
77             elsif( $ch eq '@' ){
78 1         4 *{$sym} = \@$sym;
  1         3  
79 1         1 (@{$sym}) = @value;
  1         33  
80             }
81             elsif( $ch eq '%' ){
82 1         4 *{$sym} = \%$sym;
  1         3  
83 1         3 (%{$sym}) = @value;
  1         50  
84             }
85             elsif( $ch eq '*' ){
86 1         5 *{$sym} = \*$sym;
  1         2  
87 1         3 (*{$sym}) = shift @value;
  1         55  
88             }
89             elsif( $ch eq '&' ){
90 1         2 *{$sym} = shift @value;
  1         29  
91             }
92             else {
93 0           require Carp;
94 0           Carp::croak("'$var' is not a valid variable name");
95             }
96             } else {
97 0           require Carp;
98 0           Carp::croak("'$var' is not a valid variable name");
99             }
100             }
101             };
102            
103             1;
104             __END__