File Coverage

blib/lib/App/perlfind/Plugin/Perlvar.pm
Criterion Covered Total %
statement 12 12 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 16 16 100.0


line stmt bran cond sub pod time code
1             package App::perlfind::Plugin::Perlvar;
2 2     2   6430 use 5.008;
  2         10  
  2         377  
3 2     2   11 use strict;
  2         3  
  2         70  
4 2     2   10 use warnings;
  2         3  
  2         59  
5 2     2   9 use App::perlfind;
  2         4  
  2         2100  
6             our $VERSION = '2.05';
7              
8             # Generate %is_var with "util/perlvar-extract.pl". The value is what
9             # the query key gets rewritten as.
10              
11             # TODO generate this hash at runtime just like perlvar-extract does.
12             # Needs to find perlvar.pod; at the moment I use "perldoc -l perlvar"
13             # for that, but it seems bad to call perldoc more or less within
14             # itself. Pod::Perldoc doesn't provide a method just to find the POD
15             # file, though.
16              
17             my %is_var = (
18             '%+' => '%+',
19             'INPUT_LINE_NUMBER' => '$INPUT_LINE_NUMBER',
20             '$ERRNO' => '$ERRNO',
21             '$OSNAME' => '$OSNAME',
22             '$b' => '$b',
23             'ERRNO' => '%ERRNO',
24             'SIG' => '%SIG',
25             '$OUTPUT_FIELD_SEPARATOR' => '$OUTPUT_FIELD_SEPARATOR',
26             '@_' => '@_',
27             'UNICODE' => '${^UNICODE}',
28             'LAST_SUBMATCH_RESULT' => '$LAST_SUBMATCH_RESULT',
29             '$COMPILING' => '$COMPILING',
30             '%ERRNO' => '%ERRNO',
31             '$OUTPUT_RECORD_SEPARATOR' => '$OUTPUT_RECORD_SEPARATOR',
32             '$FORMAT_NAME' => '$FORMAT_NAME',
33             '${^RE_DEBUG_FLAGS}' => '${^RE_DEBUG_FLAGS}',
34             '$EUID' => '$EUID',
35             'OPEN' => '${^OPEN}',
36             'EXECUTABLE_NAME' => '$EXECUTABLE_NAME',
37             'EFFECTIVE_USER_ID' => '$EFFECTIVE_USER_ID',
38             '$OS_ERROR' => '$OS_ERROR',
39             'CHILD_ERROR_NATIVE' => '$^CHILD_ERROR_NATIVE',
40             'ENCODING' => '${^ENCODING}',
41             '$`' => '$`',
42             '$~' => '$~',
43             '$^T' => '$^T',
44             'PROCESS_ID' => '$PROCESS_ID',
45             'WARNING' => '$WARNING',
46             '$EXCEPTIONS_BEING_CAUGHT' => '$EXCEPTIONS_BEING_CAUGHT',
47             '$)' => '$)',
48             '$2' => '$2',
49             '$ORS' => '$ORS',
50             '$^A' => '$^A',
51             'LIST_SEPARATOR' => '$LIST_SEPARATOR',
52             '${^UTF8CACHE}' => '${^UTF8CACHE}',
53             '$OFS' => '$OFS',
54             '%SIG' => '%SIG',
55             '$EFFECTIVE_GROUP_ID' => '$EFFECTIVE_GROUP_ID',
56             '$ARGV' => '$ARGV',
57             '$^O' => '$^O',
58             'DEBUGGING' => '$DEBUGGING',
59             'EGID' => '$EGID',
60             'MATCH' => '${^MATCH}',
61             '$GID' => '$GID',
62             'TAINT' => '${^TAINT}',
63             '$MATCH' => '$MATCH',
64             '${^WARNING_BITS}' => '${^WARNING_BITS}',
65             '$^W' => '$^W',
66             '$^E' => '$^E',
67             '${^GLOBAL_PHASE}' => '${^GLOBAL_PHASE}',
68             'PERLDB' => '$PERLDB',
69             '$ARG' => '$ARG',
70             '$:' => '$:',
71             '$+' => '$+',
72             '$RS' => '$RS',
73             'UID' => '$UID',
74             '@LAST_MATCH_START' => '@LAST_MATCH_START',
75             'FORMAT_LINES_LEFT' => '$FORMAT_LINES_LEFT',
76             'PERL_VERSION' => '$PERL_VERSION',
77             '$/' => '$/',
78             '2' => '$2',
79             '$LAST_SUBMATCH_RESULT' => '$LAST_SUBMATCH_RESULT',
80             'NR' => '$NR',
81             'OUTPUT_FIELD_SEPARATOR' => '$OUTPUT_FIELD_SEPARATOR',
82             '${^RE_TRIE_MAXBUF}' => '${^RE_TRIE_MAXBUF}',
83             '$0' => '$0',
84             'RE_TRIE_MAXBUF' => '${^RE_TRIE_MAXBUF}',
85             '$^X' => '$^X',
86             'OFS' => '$OFS',
87             '$WARNING' => '$WARNING',
88             'FORMAT_NAME' => '$FORMAT_NAME',
89             '$=' => '$=',
90             'ARGV' => '@ARGV',
91             'INC' => '%INC',
92             '${^UTF8LOCALE}' => '${^UTF8LOCALE}',
93             '@INC' => '@INC',
94             '${^PREMATCH}' => '${^PREMATCH}',
95             '$FORMAT_FORMFEED' => '$FORMAT_FORMFEED',
96             '$PERL_VERSION' => '$PERL_VERSION',
97             '$[' => '$[',
98             '$CHILD_ERROR' => '$CHILD_ERROR',
99             '%-' => '%-',
100             '$$' => '$$',
101             '$FORMAT_TOP_NAME' => '$FORMAT_TOP_NAME',
102             '$^V' => '$^V',
103             '$EVAL_ERROR' => '$EVAL_ERROR',
104             '$-' => '$-',
105             '$ACCUMULATOR' => '$ACCUMULATOR',
106             '$^I' => '$^I',
107             '$^R' => '$^R',
108             '%ENV' => '%ENV',
109             '$&' => '$&',
110             'OUTPUT_RECORD_SEPARATOR' => '$OUTPUT_RECORD_SEPARATOR',
111             'ARRAY_BASE' => '$ARRAY_BASE',
112             'EXCEPTIONS_BEING_CAUGHT' => '$EXCEPTIONS_BEING_CAUGHT',
113             '$]' => '$]',
114             '$LAST_PAREN_MATCH' => '$LAST_PAREN_MATCH',
115             'PROGRAM_NAME' => '$PROGRAM_NAME',
116             '$BASETIME' => '$BASETIME',
117             '0' => '$0',
118             '$UID' => '$UID',
119             '${^WIN32_SLOPPY_STAT}' => '${^WIN32_SLOPPY_STAT}',
120             '$^P' => '$^P',
121             '$^N' => '$^N',
122             'FORMAT_PAGE_NUMBER' => '$FORMAT_PAGE_NUMBER',
123             'OSNAME' => '$OSNAME',
124             'ARG' => '@ARG',
125             '8' => '$8',
126             'LAST_MATCH_END' => '@LAST_MATCH_END',
127             '%!' => '%!',
128             'LAST_PAREN_MATCH' => '%LAST_PAREN_MATCH',
129             'OS_ERROR' => '%OS_ERROR',
130             '$"' => '$"',
131             '$EFFECTIVE_USER_ID' => '$EFFECTIVE_USER_ID',
132             '$_' => '$_',
133             '5' => '$5',
134             'SUBSEP' => '$SUBSEP',
135             '7' => '$7',
136             '$EXTENDED_OS_ERROR' => '$EXTENDED_OS_ERROR',
137             '${^MATCH}' => '${^MATCH}',
138             '$PREMATCH' => '$PREMATCH',
139             '$OFMT' => '$OFMT',
140             'GID' => '$GID',
141             '$a' => '$a',
142             '$*' => '$*',
143             '$PID' => '$PID',
144             'OUTPUT_AUTOFLUSH' => '$OUTPUT_AUTOFLUSH',
145             'PREMATCH' => '$PREMATCH',
146             '%LAST_PAREN_MATCH' => '%LAST_PAREN_MATCH',
147             '$FORMAT_LINES_LEFT' => '$FORMAT_LINES_LEFT',
148             'GLOBAL_PHASE' => '${^GLOBAL_PHASE}',
149             '$EXECUTABLE_NAME' => '$EXECUTABLE_NAME',
150             '$POSTMATCH' => '$POSTMATCH',
151             'INPUT_RECORD_SEPARATOR' => '$INPUT_RECORD_SEPARATOR',
152             '${^UNICODE}' => '${^UNICODE}',
153             '$^CHILD_ERROR_NATIVE' => '$^CHILD_ERROR_NATIVE',
154             'FORMAT_LINES_PER_PAGE' => '$FORMAT_LINES_PER_PAGE',
155             'OFMT' => '$OFMT',
156             '$FORMAT_LINES_PER_PAGE' => '$FORMAT_LINES_PER_PAGE',
157             'FORMAT_TOP_NAME' => '$FORMAT_TOP_NAME',
158             '$EGID' => '$EGID',
159             '$OUTPUT_AUTOFLUSH' => '$OUTPUT_AUTOFLUSH',
160             '$3' => '$3',
161             '$REAL_GROUP_ID' => '$REAL_GROUP_ID',
162             '$;' => '$;',
163             '$^L' => '$^L',
164             'OLD_PERL_VERSION' => '$OLD_PERL_VERSION',
165             '$SYSTEM_FD_MAX' => '$SYSTEM_FD_MAX',
166             'POSTMATCH' => '${^POSTMATCH}',
167             '$INPUT_LINE_NUMBER' => '$INPUT_LINE_NUMBER',
168             '_' => '$_',
169             '@LAST_MATCH_END' => '@LAST_MATCH_END',
170             '$^S' => '$^S',
171             '$LAST_REGEXP_CODE_RESULT' => '$LAST_REGEXP_CODE_RESULT',
172             '${^OPEN}' => '${^OPEN}',
173             '$1' => '$1',
174             '@-' => '@-',
175             'EFFECTIVE_GROUP_ID' => '$EFFECTIVE_GROUP_ID',
176             '$|' => '$|',
177             '%OS_ERROR' => '%OS_ERROR',
178             '$^H' => '$^H',
179             '%^H' => '%^H',
180             '$.' => '$.',
181             'WIN32_SLOPPY_STAT' => '${^WIN32_SLOPPY_STAT}',
182             '$^D' => '$^D',
183             '1' => '$1',
184             'RS' => '$RS',
185             '%INC' => '%INC',
186             '$LIST_SEPARATOR' => '$LIST_SEPARATOR',
187             'WARNING_BITS' => '${^WARNING_BITS}',
188             '$(' => '$(',
189             '$#' => '$#',
190             '$@' => '$@',
191             'EXTENDED_OS_ERROR' => '$EXTENDED_OS_ERROR',
192             'CHILD_ERROR' => '$CHILD_ERROR',
193             'EUID' => '$EUID',
194             '$,' => '$,',
195             'ENV' => '%ENV',
196             '$DEBUGGING' => '$DEBUGGING',
197             '$INPUT_RECORD_SEPARATOR' => '$INPUT_RECORD_SEPARATOR',
198             '$?' => '$?',
199             '$REAL_USER_ID' => '$REAL_USER_ID',
200             '$NR' => '$NR',
201             '$^M' => '$^M',
202             '${^TAINT}' => '${^TAINT}',
203             'REAL_GROUP_ID' => '$REAL_GROUP_ID',
204             '@ARGV' => '@ARGV',
205             'LAST_REGEXP_CODE_RESULT' => '$LAST_REGEXP_CODE_RESULT',
206             'UTF8CACHE' => '${^UTF8CACHE}',
207             'FORMAT_FORMFEED' => '$FORMAT_FORMFEED',
208             'ORS' => '$ORS',
209             '$^F' => '$^F',
210             '$%' => '$%',
211             '$OLD_PERL_VERSION' => '$OLD_PERL_VERSION',
212             '$ARRAY_BASE' => '$ARRAY_BASE',
213             '${^POSTMATCH}' => '${^POSTMATCH}',
214             'RE_DEBUG_FLAGS' => '${^RE_DEBUG_FLAGS}',
215             '$SUBSEP' => '$SUBSEP',
216             '$!' => '$!',
217             '@ARG' => '@ARG',
218             '$PROGRAM_NAME' => '$PROGRAM_NAME',
219             '$FORMAT_PAGE_NUMBER' => '$FORMAT_PAGE_NUMBER',
220             '6' => '$6',
221             'PID' => '$PID',
222             '$^C' => '$^C',
223             '3' => '$3',
224             'ACCUMULATOR' => '$ACCUMULATOR',
225             '$INPLACE_EDIT' => '$INPLACE_EDIT',
226             '@F' => '@F',
227             '9' => '$9',
228             'LAST_MATCH_START' => '%LAST_MATCH_START',
229             '$\\' => '$\\',
230             '${^ENCODING}' => '${^ENCODING}',
231             '4' => '$4',
232             'REAL_USER_ID' => '$REAL_USER_ID',
233             '$^' => '$^',
234             'BASETIME' => '$BASETIME',
235             'COMPILING' => '$COMPILING',
236             '@+' => '@+',
237             '$PROCESS_ID' => '$PROCESS_ID',
238             '$PERLDB' => '$PERLDB',
239             'INPLACE_EDIT' => '$INPLACE_EDIT',
240             'EVAL_ERROR' => '$EVAL_ERROR',
241             'SYSTEM_FD_MAX' => '$SYSTEM_FD_MAX',
242             'UTF8LOCALE' => '${^UTF8LOCALE}',
243             '$\'' => '$\'',
244             '%LAST_MATCH_START' => '%LAST_MATCH_START'
245             );
246              
247             # find __WARN__, WARN, INT etc. as %SIG.
248             $is_var{$_} = '%SIG' for qw(WARN DIE), keys %SIG;
249              
250             App::perlfind->add_trigger(
251             'matches.add' => sub {
252             my ($class, $word, $matches) = @_;
253             if (my $rewrite = $is_var{$$word}) {
254             $$word = $rewrite;
255             push @$matches, 'perlvar';
256             }
257             }
258             );
259             1;
260              
261             __END__