| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
require 5; |
|
3
|
|
|
|
|
|
|
package strict::ModuleName; # Pod at end |
|
4
|
|
|
|
|
|
|
$VERSION = '0.04'; |
|
5
|
1
|
|
|
1
|
|
846
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
75
|
|
|
6
|
1
|
50
|
|
1
|
|
26
|
BEGIN { *DEBUG = sub () {0} unless defined &DEBUG } |
|
7
|
1
|
|
|
1
|
|
6
|
use vars qw($DIE); |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
852
|
|
|
8
|
|
|
|
|
|
|
$DIE = 1 unless defined $DIE; |
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
sub import { |
|
11
|
|
|
|
|
|
|
# Make sure that the calling package's name agrees with its filename |
|
12
|
13
|
50
|
|
13
|
|
7425
|
if(@_ > 1) { |
|
13
|
0
|
|
|
|
|
0
|
require Carp; |
|
14
|
0
|
|
|
|
|
0
|
for my $msg ( |
|
15
|
|
|
|
|
|
|
"Proper usage: use " . __PACKAGE__ . "; #(with no parameters) " |
|
16
|
0
|
0
|
|
|
|
0
|
) { $DIE ? Carp::croak($msg) : Carp::carp($msg) } |
|
17
|
|
|
|
|
|
|
} |
|
18
|
13
|
|
|
|
|
53
|
my($package, $filename) = caller(0); |
|
19
|
|
|
|
|
|
|
|
|
20
|
13
|
50
|
|
|
|
66
|
unless($filename =~ m/.\.pm$/s) { # catch this first off |
|
21
|
0
|
0
|
|
|
|
0
|
if($filename =~ m/.(\.pm)$/is) { |
|
22
|
0
|
|
|
|
|
0
|
for my $msg ( |
|
23
|
|
|
|
|
|
|
"filename \"$filename\" should end in \".pm\", not \"$1\"\n" |
|
24
|
0
|
0
|
|
|
|
0
|
) { return $DIE ? die($msg) : warn($msg) } |
|
25
|
|
|
|
|
|
|
} else { |
|
26
|
0
|
|
|
|
|
0
|
for my $msg ( |
|
27
|
|
|
|
|
|
|
"filename \"$filename\" should end in \".pm\"!\n" |
|
28
|
0
|
0
|
|
|
|
0
|
) { return $DIE ? die($msg) : warn($msg) } |
|
29
|
|
|
|
|
|
|
} |
|
30
|
|
|
|
|
|
|
} |
|
31
|
|
|
|
|
|
|
|
|
32
|
13
|
|
|
|
|
28
|
my $pre = quotemeta($package); |
|
33
|
13
|
|
|
|
|
47
|
$pre =~ s/(\\[\'\:])+/./g; # Foo::Bar => Foo.Bar |
|
34
|
|
|
|
|
|
|
|
|
35
|
13
|
|
|
|
|
14
|
DEBUG and print ">>>>. $package in $filename\n"; |
|
36
|
|
|
|
|
|
|
|
|
37
|
403
|
|
|
|
|
616
|
my $re = join '', |
|
38
|
|
|
|
|
|
|
'^(', |
|
39
|
|
|
|
|
|
|
join('|', map quotemeta($_), |
|
40
|
13
|
|
|
|
|
43
|
sort {length($b) <=> length($a)} |
|
41
|
|
|
|
|
|
|
@INC |
|
42
|
|
|
|
|
|
|
), |
|
43
|
|
|
|
|
|
|
')', |
|
44
|
|
|
|
|
|
|
'\W{0,2}', |
|
45
|
|
|
|
|
|
|
# generous RE matching trailing pathsep thing like / or \ or : |
|
46
|
|
|
|
|
|
|
$pre, |
|
47
|
|
|
|
|
|
|
'\.pm$', |
|
48
|
|
|
|
|
|
|
; |
|
49
|
|
|
|
|
|
|
|
|
50
|
13
|
|
|
|
|
32
|
if(DEBUG) { |
|
51
|
|
|
|
|
|
|
DEBUG and print $re, "\n\n"; |
|
52
|
|
|
|
|
|
|
for(0 .. 10) { |
|
53
|
|
|
|
|
|
|
print("\n"), last unless defined caller($_); |
|
54
|
|
|
|
|
|
|
print "caller($_) is ", join(" # ", map $_ || '', (caller($_))[0..7] ), "\n"; |
|
55
|
|
|
|
|
|
|
} |
|
56
|
|
|
|
|
|
|
} |
|
57
|
|
|
|
|
|
|
|
|
58
|
13
|
100
|
|
|
|
1760
|
if($filename =~ m/$re/s) { |
|
59
|
4
|
|
|
|
|
7
|
DEBUG and print "file \"$filename\" producing package \"$package\" is okay\n"; |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
} else { |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
{ |
|
64
|
|
|
|
|
|
|
# Jump thru hoops to check for a very common case: |
|
65
|
|
|
|
|
|
|
# whether that package was like "perl -cw X.pm" or "perl -w X.pm" |
|
66
|
|
|
|
|
|
|
|
|
67
|
9
|
|
|
|
|
10
|
my @callstack; |
|
|
9
|
|
|
|
|
14
|
|
|
68
|
9
|
|
|
|
|
14
|
my $back_count = 0; |
|
69
|
9
|
|
|
|
|
10
|
my $real_depth = 0; |
|
70
|
9
|
|
|
|
|
10
|
while(1) { |
|
71
|
72
|
100
|
|
|
|
155
|
last unless defined caller($back_count); |
|
72
|
63
|
|
|
|
|
175
|
my $sub_name = (caller($back_count))[3]; |
|
73
|
63
|
100
|
100
|
|
|
238
|
++$real_depth |
|
74
|
|
|
|
|
|
|
unless $sub_name eq '(eval)' or $sub_name =~ m/\:\:BEGIN$/s; |
|
75
|
63
|
|
|
|
|
80
|
++$back_count; |
|
76
|
|
|
|
|
|
|
} |
|
77
|
9
|
|
|
|
|
12
|
my $fn = $filename; |
|
78
|
9
|
50
|
|
|
|
44
|
$fn =~ s/\.pm$//s or die "WHAAAAAT?"; |
|
79
|
|
|
|
|
|
|
|
|
80
|
9
|
50
|
33
|
|
|
55
|
if($real_depth == 1 |
|
|
|
|
33
|
|
|
|
|
|
81
|
|
|
|
|
|
|
and length($fn) <= length($package) |
|
82
|
|
|
|
|
|
|
and substr($package, 0 - length($fn)) eq $fn |
|
83
|
|
|
|
|
|
|
) { |
|
84
|
0
|
|
|
|
|
0
|
warn( # yes, merely warn |
|
85
|
|
|
|
|
|
|
"Can't verify whether package name \"$package\" is good in \"$filename\"" |
|
86
|
|
|
|
|
|
|
. "\n -- Instead try: perl -M$package -e -1\n" |
|
87
|
|
|
|
|
|
|
); |
|
88
|
0
|
|
|
|
|
0
|
return; |
|
89
|
|
|
|
|
|
|
} |
|
90
|
|
|
|
|
|
|
} |
|
91
|
|
|
|
|
|
|
|
|
92
|
9
|
50
|
|
|
|
38
|
if(grep ref($_), @INC) { |
|
93
|
0
|
|
|
|
|
0
|
warn( |
|
94
|
|
|
|
|
|
|
"file \"$filename\" producing package \"$package\" may be bad,\n" |
|
95
|
|
|
|
|
|
|
. " -- but I can't be sure, because there's coderefs in \@INC\n"); |
|
96
|
0
|
|
|
|
|
0
|
return; |
|
97
|
|
|
|
|
|
|
} |
|
98
|
|
|
|
|
|
|
|
|
99
|
9
|
|
|
|
|
28
|
for my $msg ( |
|
100
|
|
|
|
|
|
|
"file \"$filename\" producing package \"$package\" is bad\n" |
|
101
|
9
|
50
|
|
|
|
339
|
) { return $DIE ? die($msg) : warn($msg) } |
|
102
|
|
|
|
|
|
|
} |
|
103
|
|
|
|
|
|
|
|
|
104
|
4
|
|
|
|
|
96
|
return; |
|
105
|
|
|
|
|
|
|
} |
|
106
|
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
&import(); # Yes, test myself! |
|
108
|
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
1; |
|
110
|
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
__END__ |