File Coverage

ppport.h
Criterion Covered Total %
statement 25 36 69.4
branch 21 30 70.0
condition n/a
subroutine n/a
pod n/a
total 46 66 69.7


line stmt bran cond sub pod time code
1             #if 0
2             <<'SKIP';
3             #endif
4             /*
5             ----------------------------------------------------------------------
6              
7             ppport.h -- Perl/Pollution/Portability Version 3.52_04
8              
9             Automatically created by Devel::PPPort running under perl 5.026001.
10              
11             Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
12             includes in parts/inc/ instead.
13              
14             Use 'perldoc ppport.h' to view the documentation below.
15              
16             ----------------------------------------------------------------------
17              
18             SKIP
19              
20             =pod
21              
22             =head1 NAME
23              
24             ppport.h - Perl/Pollution/Portability version 3.52_04
25              
26             =head1 SYNOPSIS
27              
28             perl ppport.h [options] [source files]
29              
30             Searches current directory for files if no [source files] are given
31              
32             --help show short help
33              
34             --version show version
35              
36             --patch=file write one patch file with changes
37             --copy=suffix write changed copies with suffix
38             --diff=program use diff program and options
39              
40             --compat-version=version provide compatibility with Perl version
41             --cplusplus accept C++ comments
42              
43             --quiet don't output anything except fatal errors
44             --nodiag don't show diagnostics
45             --nohints don't show hints
46             --nochanges don't suggest changes
47             --nofilter don't filter input files
48              
49             --strip strip all script and doc functionality
50             from ppport.h
51              
52             --list-provided list provided API
53             --list-unsupported list unsupported API
54             --api-info=name show Perl API portability information
55              
56             =head1 COMPATIBILITY
57              
58             This version of F is designed to support operation with Perl
59             installations back to 5.003, and has been tested up to 5.30.
60              
61             =head1 OPTIONS
62              
63             =head2 --help
64              
65             Display a brief usage summary.
66              
67             =head2 --version
68              
69             Display the version of F.
70              
71             =head2 --patch=I
72              
73             If this option is given, a single patch file will be created if
74             any changes are suggested. This requires a working diff program
75             to be installed on your system.
76              
77             =head2 --copy=I
78              
79             If this option is given, a copy of each file will be saved with
80             the given suffix that contains the suggested changes. This does
81             not require any external programs. Note that this does not
82             automagically add a dot between the original filename and the
83             suffix. If you want the dot, you have to include it in the option
84             argument.
85              
86             If neither C<--patch> or C<--copy> are given, the default is to
87             simply print the diffs for each file. This requires either
88             C or a C program to be installed.
89              
90             =head2 --diff=I
91              
92             Manually set the diff program and options to use. The default
93             is to use C, when installed, and output unified
94             context diffs.
95              
96             =head2 --compat-version=I
97              
98             Tell F to check for compatibility with the given
99             Perl version. The default is to check for compatibility with Perl
100             version 5.003. You can use this option to reduce the output
101             of F if you intend to be backward compatible only
102             down to a certain Perl version.
103              
104             =head2 --cplusplus
105              
106             Usually, F will detect C++ style comments and
107             replace them with C style comments for portability reasons.
108             Using this option instructs F to leave C++
109             comments untouched.
110              
111             =head2 --quiet
112              
113             Be quiet. Don't print anything except fatal errors.
114              
115             =head2 --nodiag
116              
117             Don't output any diagnostic messages. Only portability
118             alerts will be printed.
119              
120             =head2 --nohints
121              
122             Don't output any hints. Hints often contain useful portability
123             notes. Warnings will still be displayed.
124              
125             =head2 --nochanges
126              
127             Don't suggest any changes. Only give diagnostic output and hints
128             unless these are also deactivated.
129              
130             =head2 --nofilter
131              
132             Don't filter the list of input files. By default, files not looking
133             like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
134              
135             =head2 --strip
136              
137             Strip all script and documentation functionality from F.
138             This reduces the size of F dramatically and may be useful
139             if you want to include F in smaller modules without
140             increasing their distribution size too much.
141              
142             The stripped F will have a C<--unstrip> option that allows
143             you to undo the stripping, but only if an appropriate C
144             module is installed.
145              
146             =head2 --list-provided
147              
148             Lists the API elements for which compatibility is provided by
149             F. Also lists if it must be explicitly requested,
150             if it has dependencies, and if there are hints or warnings for it.
151              
152             =head2 --list-unsupported
153              
154             Lists the API elements that are known not to be supported by
155             F and below which version of Perl they probably
156             won't be available or work.
157              
158             =head2 --api-info=I
159              
160             Show portability information for API elements matching I.
161             If I is surrounded by slashes, it is interpreted as a regular
162             expression.
163              
164             =head1 DESCRIPTION
165              
166             In order for a Perl extension (XS) module to be as portable as possible
167             across differing versions of Perl itself, certain steps need to be taken.
168              
169             =over 4
170              
171             =item *
172              
173             Including this header is the first major one. This alone will give you
174             access to a large part of the Perl API that hasn't been available in
175             earlier Perl releases. Use
176              
177             perl ppport.h --list-provided
178              
179             to see which API elements are provided by ppport.h.
180              
181             =item *
182              
183             You should avoid using deprecated parts of the API. For example, using
184             global Perl variables without the C prefix is deprecated. Also,
185             some API functions used to have a C prefix. Using this form is
186             also deprecated. You can safely use the supported API, as F
187             will provide wrappers for older Perl versions.
188              
189             =item *
190              
191             If you use one of a few functions or variables that were not present in
192             earlier versions of Perl, and that can't be provided using a macro, you
193             have to explicitly request support for these functions by adding one or
194             more C<#define>s in your source code before the inclusion of F.
195              
196             These functions or variables will be marked C in the list shown
197             by C<--list-provided>.
198              
199             Depending on whether you module has a single or multiple files that
200             use such functions or variables, you want either C or global
201             variants.
202              
203             For a C function or variable (used only in a single source
204             file), use:
205              
206             #define NEED_function
207             #define NEED_variable
208              
209             For a global function or variable (used in multiple source files),
210             use:
211              
212             #define NEED_function_GLOBAL
213             #define NEED_variable_GLOBAL
214              
215             Note that you mustn't have more than one global request for the
216             same function or variable in your project.
217              
218             Function / Variable Static Request Global Request
219             -----------------------------------------------------------------------------------------
220             PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL
221             PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
222             caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL
223             croak_xs_usage() NEED_croak_xs_usage NEED_croak_xs_usage_GLOBAL
224             die_sv() NEED_die_sv NEED_die_sv_GLOBAL
225             eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
226             grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
227             grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
228             grok_number() NEED_grok_number NEED_grok_number_GLOBAL
229             grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
230             grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL
231             gv_init_pv() NEED_gv_init_pv NEED_gv_init_pv_GLOBAL
232             gv_init_pvn() NEED_gv_init_pvn NEED_gv_init_pvn_GLOBAL
233             gv_init_sv() NEED_gv_init_sv NEED_gv_init_sv_GLOBAL
234             load_module() NEED_load_module NEED_load_module_GLOBAL
235             mess() NEED_mess NEED_mess_GLOBAL
236             mess_nocontext() NEED_mess_nocontext NEED_mess_nocontext_GLOBAL
237             mess_sv() NEED_mess_sv NEED_mess_sv_GLOBAL
238             mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL
239             my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL
240             my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL
241             my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL
242             my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL
243             my_strnlen() NEED_my_strnlen NEED_my_strnlen_GLOBAL
244             newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
245             newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL
246             pv_display() NEED_pv_display NEED_pv_display_GLOBAL
247             pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL
248             pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL
249             sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
250             sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
251             sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL
252             sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL
253             sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL
254             utf8_to_uvchr_buf() NEED_utf8_to_uvchr_buf NEED_utf8_to_uvchr_buf_GLOBAL
255             vload_module() NEED_vload_module NEED_vload_module_GLOBAL
256             vmess() NEED_vmess NEED_vmess_GLOBAL
257             warner() NEED_warner NEED_warner_GLOBAL
258              
259             To avoid namespace conflicts, you can change the namespace of the
260             explicitly exported functions / variables using the C
261             macro. Just C<#define> the macro before including C:
262              
263             #define DPPP_NAMESPACE MyOwnNamespace_
264             #include "ppport.h"
265              
266             The default namespace is C.
267              
268             =back
269              
270             The good thing is that most of the above can be checked by running
271             F on your source code. See the next section for
272             details.
273              
274             =head1 EXAMPLES
275              
276             To verify whether F is needed for your module, whether you
277             should make any changes to your code, and whether any special defines
278             should be used, F can be run as a Perl script to check your
279             source code. Simply say:
280              
281             perl ppport.h
282              
283             The result will usually be a list of patches suggesting changes
284             that should at least be acceptable, if not necessarily the most
285             efficient solution, or a fix for all possible problems.
286              
287             If you know that your XS module uses features only available in
288             newer Perl releases, if you're aware that it uses C++ comments,
289             and if you want all suggestions as a single patch file, you could
290             use something like this:
291              
292             perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
293              
294             If you only want your code to be scanned without any suggestions
295             for changes, use:
296              
297             perl ppport.h --nochanges
298              
299             You can specify a different C program or options, using
300             the C<--diff> option:
301              
302             perl ppport.h --diff='diff -C 10'
303              
304             This would output context diffs with 10 lines of context.
305              
306             If you want to create patched copies of your files instead, use:
307              
308             perl ppport.h --copy=.new
309              
310             To display portability information for the C function,
311             use:
312              
313             perl ppport.h --api-info=newSVpvn
314              
315             Since the argument to C<--api-info> can be a regular expression,
316             you can use
317              
318             perl ppport.h --api-info=/_nomg$/
319              
320             to display portability information for all C<_nomg> functions or
321              
322             perl ppport.h --api-info=/./
323              
324             to display information for all known API elements.
325              
326             =head1 BUGS
327              
328             If this version of F is causing failure during
329             the compilation of this module, please check if newer versions
330             of either this module or C are available on CPAN
331             before sending a bug report.
332              
333             If F was generated using the latest version of
334             C and is causing failure of this module, please
335             send a bug report to L.
336              
337             Please include the following information:
338              
339             =over 4
340              
341             =item 1.
342              
343             The complete output from running "perl -V"
344              
345             =item 2.
346              
347             This file.
348              
349             =item 3.
350              
351             The name and version of the module you were trying to build.
352              
353             =item 4.
354              
355             A full log of the build that failed.
356              
357             =item 5.
358              
359             Any other information that you think could be relevant.
360              
361             =back
362              
363             For the latest version of this code, please get the C
364             module from CPAN.
365              
366             =head1 COPYRIGHT
367              
368             Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
369              
370             Version 2.x, Copyright (C) 2001, Paul Marquess.
371              
372             Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
373              
374             This program is free software; you can redistribute it and/or
375             modify it under the same terms as Perl itself.
376              
377             =head1 SEE ALSO
378              
379             See L.
380              
381             =cut
382              
383             use strict qw(refs vars subs);
384              
385             # Disable broken TRIE-optimization
386             BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
387              
388             my $VERSION = 3.52_04;
389              
390             my %opt = (
391             quiet => 0,
392             diag => 1,
393             hints => 1,
394             changes => 1,
395             cplusplus => 0,
396             filter => 1,
397             strip => 0,
398             version => 0,
399             );
400              
401             my($ppport) = $0 =~ /([\w.]+)$/;
402             my $LF = '(?:\r\n|[\r\n])'; # line feed
403             my $HS = "[ \t]"; # horizontal whitespace
404              
405             # Never use C comments in this file!
406             my $ccs = '/'.'*';
407             my $cce = '*'.'/';
408             my $rccs = quotemeta $ccs;
409             my $rcce = quotemeta $cce;
410              
411             eval {
412             require Getopt::Long;
413             Getopt::Long::GetOptions(\%opt, qw(
414             help quiet diag! filter! hints! changes! cplusplus strip version
415             patch=s copy=s diff=s compat-version=s
416             list-provided list-unsupported api-info=s
417             )) or usage();
418             };
419              
420             if ($@ and grep /^-/, @ARGV) {
421             usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
422             die "Getopt::Long not found. Please don't use any options.\n";
423             }
424              
425             if ($opt{version}) {
426             print "This is $0 $VERSION.\n";
427             exit 0;
428             }
429              
430             usage() if $opt{help};
431             strip() if $opt{strip};
432              
433             if (exists $opt{'compat-version'}) {
434             my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
435             if ($@) {
436             die "Invalid version number format: '$opt{'compat-version'}'\n";
437             }
438             die "Only Perl 5 is supported\n" if $r != 5;
439             die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
440             $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
441             }
442             else {
443             $opt{'compat-version'} = 5;
444             }
445              
446             my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
447             ? ( $1 => {
448             ($2 ? ( base => $2 ) : ()),
449             ($3 ? ( todo => $3 ) : ()),
450             (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
451             (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
452             (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
453             } )
454             : die "invalid spec: $_" } qw(
455             AvFILLp|5.004050||p
456             AvFILL|||
457             BOM_UTF8|||
458             BhkDISABLE||5.024000|
459             BhkENABLE||5.024000|
460             BhkENTRY_set||5.024000|
461             CLASS|||n
462             CPERLscope|5.005000||p
463             C_ARRAY_END|5.013002||p
464             C_ARRAY_LENGTH|5.008001||p
465             CopFILEAV|5.006000||p
466             CopFILEGV_set|5.006000||p
467             CopFILEGV|5.006000||p
468             CopFILESV|5.006000||p
469             CopFILE_set|5.006000||p
470             CopFILE|5.006000||p
471             CopSTASHPV_set|5.006000||p
472             CopSTASHPV|5.006000||p
473             CopSTASH_eq|5.006000||p
474             CopSTASH_set|5.006000||p
475             CopSTASH|5.006000||p
476             CopyD|5.009002|5.004050|p
477             Copy|||
478             CvPADLIST||5.008001|
479             CvSTASH|||
480             DECLARATION_FOR_LC_NUMERIC_MANIPULATION||5.021010|n
481             DEFSV_set|5.010001||p
482             DEFSV|5.004050||p
483             DO_UTF8||5.006000|
484             END_EXTERN_C|5.005000||p
485             ENTER_with_name|||
486             ENTER|||
487             ERRSV|5.004050||p
488             EXTEND|||
489             EXTERN_C|5.005000||p
490             FREETMPS|||
491             GIMME_V||5.004000|n
492             GIMME|||n
493             GROK_NUMERIC_RADIX|5.007002||p
494             GV_NOADD_MASK|||p
495             G_ARRAY|||
496             G_DISCARD|||
497             G_EVAL|||
498             G_METHOD|5.006001||p
499             G_NOARGS|||
500             G_SCALAR|||
501             G_VOID||5.004000|
502             GetVars|||
503             GvAV|||
504             GvCV|||
505             GvHV|||
506             GvSVn|5.009003||p
507             GvSV|||
508             Gv_AMupdate||5.011000|
509             HEf_SVKEY|5.003070||p
510             HeHASH||5.003070|
511             HeKEY||5.003070|
512             HeKLEN||5.003070|
513             HePV||5.004000|
514             HeSVKEY_force||5.003070|
515             HeSVKEY_set||5.004000|
516             HeSVKEY||5.003070|
517             HeUTF8|5.010001|5.008000|p
518             HeVAL||5.003070|
519             HvENAMELEN||5.015004|
520             HvENAMEUTF8||5.015004|
521             HvENAME||5.013007|
522             HvNAMELEN_get|5.009003||p
523             HvNAMELEN||5.015004|
524             HvNAMEUTF8||5.015004|
525             HvNAME_get|5.009003||p
526             HvNAME|||
527             INT2PTR|5.006000||p
528             IN_LOCALE_COMPILETIME|5.007002||p
529             IN_LOCALE_RUNTIME|5.007002||p
530             IN_LOCALE|5.007002||p
531             IN_PERL_COMPILETIME|5.008001||p
532             IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
533             IS_NUMBER_INFINITY|5.007002||p
534             IS_NUMBER_IN_UV|5.007002||p
535             IS_NUMBER_NAN|5.007003||p
536             IS_NUMBER_NEG|5.007002||p
537             IS_NUMBER_NOT_INT|5.007002||p
538             IVSIZE|5.006000||p
539             IVTYPE|5.006000||p
540             IVdf|5.006000||p
541             LEAVE_with_name|||
542             LEAVE|||
543             LIKELY|||p
544             LINKLIST||5.013006|
545             MARK|||
546             MULTICALL||5.024000|
547             MUTABLE_PTR|5.010001||p
548             MUTABLE_SV|5.010001||p
549             MY_CXT_CLONE|5.009002||p
550             MY_CXT_INIT|5.007003||p
551             MY_CXT|5.007003||p
552             MoveD|5.009002|5.004050|p
553             Move|||
554             NOOP|5.005000||p
555             NUM2PTR|5.006000||p
556             NVTYPE|5.006000||p
557             NVef|5.006001||p
558             NVff|5.006001||p
559             NVgf|5.006001||p
560             Newxc|5.009003||p
561             Newxz|5.009003||p
562             Newx|5.009003||p
563             Nullav|||
564             Nullch|||
565             Nullcv|||
566             Nullhv|||
567             Nullsv|||
568             OP_CLASS||5.013007|
569             OP_DESC||5.007003|
570             OP_NAME||5.007003|
571             OP_TYPE_IS_OR_WAS||5.019010|
572             OP_TYPE_IS||5.019007|
573             ORIGMARK|||
574             OpHAS_SIBLING|5.021007||p
575             OpLASTSIB_set|5.021011||p
576             OpMAYBESIB_set|5.021011||p
577             OpMORESIB_set|5.021011||p
578             OpSIBLING|5.021007||p
579             PERLIO_FUNCS_CAST|5.009003||p
580             PERLIO_FUNCS_DECL|5.009003||p
581             PERL_ABS|5.008001||p
582             PERL_ARGS_ASSERT_CROAK_XS_USAGE|||p
583             PERL_BCDVERSION|5.024000||p
584             PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
585             PERL_HASH|5.003070||p
586             PERL_INT_MAX|5.003070||p
587             PERL_INT_MIN|5.003070||p
588             PERL_LONG_MAX|5.003070||p
589             PERL_LONG_MIN|5.003070||p
590             PERL_MAGIC_arylen|5.007002||p
591             PERL_MAGIC_backref|5.007002||p
592             PERL_MAGIC_bm|5.007002||p
593             PERL_MAGIC_collxfrm|5.007002||p
594             PERL_MAGIC_dbfile|5.007002||p
595             PERL_MAGIC_dbline|5.007002||p
596             PERL_MAGIC_defelem|5.007002||p
597             PERL_MAGIC_envelem|5.007002||p
598             PERL_MAGIC_env|5.007002||p
599             PERL_MAGIC_ext|5.007002||p
600             PERL_MAGIC_fm|5.007002||p
601             PERL_MAGIC_glob|5.024000||p
602             PERL_MAGIC_isaelem|5.007002||p
603             PERL_MAGIC_isa|5.007002||p
604             PERL_MAGIC_mutex|5.024000||p
605             PERL_MAGIC_nkeys|5.007002||p
606             PERL_MAGIC_overload_elem|5.024000||p
607             PERL_MAGIC_overload_table|5.007002||p
608             PERL_MAGIC_overload|5.024000||p
609             PERL_MAGIC_pos|5.007002||p
610             PERL_MAGIC_qr|5.007002||p
611             PERL_MAGIC_regdata|5.007002||p
612             PERL_MAGIC_regdatum|5.007002||p
613             PERL_MAGIC_regex_global|5.007002||p
614             PERL_MAGIC_shared_scalar|5.007003||p
615             PERL_MAGIC_shared|5.007003||p
616             PERL_MAGIC_sigelem|5.007002||p
617             PERL_MAGIC_sig|5.007002||p
618             PERL_MAGIC_substr|5.007002||p
619             PERL_MAGIC_sv|5.007002||p
620             PERL_MAGIC_taint|5.007002||p
621             PERL_MAGIC_tiedelem|5.007002||p
622             PERL_MAGIC_tiedscalar|5.007002||p
623             PERL_MAGIC_tied|5.007002||p
624             PERL_MAGIC_utf8|5.008001||p
625             PERL_MAGIC_uvar_elem|5.007003||p
626             PERL_MAGIC_uvar|5.007002||p
627             PERL_MAGIC_vec|5.007002||p
628             PERL_MAGIC_vstring|5.008001||p
629             PERL_PV_ESCAPE_ALL|5.009004||p
630             PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
631             PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
632             PERL_PV_ESCAPE_NOCLEAR|5.009004||p
633             PERL_PV_ESCAPE_QUOTE|5.009004||p
634             PERL_PV_ESCAPE_RE|5.009005||p
635             PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
636             PERL_PV_ESCAPE_UNI|5.009004||p
637             PERL_PV_PRETTY_DUMP|5.009004||p
638             PERL_PV_PRETTY_ELLIPSES|5.010000||p
639             PERL_PV_PRETTY_LTGT|5.009004||p
640             PERL_PV_PRETTY_NOCLEAR|5.010000||p
641             PERL_PV_PRETTY_QUOTE|5.009004||p
642             PERL_PV_PRETTY_REGPROP|5.009004||p
643             PERL_QUAD_MAX|5.003070||p
644             PERL_QUAD_MIN|5.003070||p
645             PERL_REVISION|5.006000||p
646             PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
647             PERL_SCAN_DISALLOW_PREFIX|5.007003||p
648             PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
649             PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
650             PERL_SHORT_MAX|5.003070||p
651             PERL_SHORT_MIN|5.003070||p
652             PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
653             PERL_SUBVERSION|5.006000||p
654             PERL_SYS_INIT3||5.006000|
655             PERL_SYS_INIT|||
656             PERL_SYS_TERM||5.024000|
657             PERL_UCHAR_MAX|5.003070||p
658             PERL_UCHAR_MIN|5.003070||p
659             PERL_UINT_MAX|5.003070||p
660             PERL_UINT_MIN|5.003070||p
661             PERL_ULONG_MAX|5.003070||p
662             PERL_ULONG_MIN|5.003070||p
663             PERL_UNUSED_ARG|5.009003||p
664             PERL_UNUSED_CONTEXT|5.009004||p
665             PERL_UNUSED_DECL|5.007002||p
666             PERL_UNUSED_RESULT|5.021001||p
667             PERL_UNUSED_VAR|5.007002||p
668             PERL_UQUAD_MAX|5.003070||p
669             PERL_UQUAD_MIN|5.003070||p
670             PERL_USE_GCC_BRACE_GROUPS|5.009004||p
671             PERL_USHORT_MAX|5.003070||p
672             PERL_USHORT_MIN|5.003070||p
673             PERL_VERSION|5.006000||p
674             PL_DBsignal|5.005000||p
675             PL_DBsingle|||p
676             PL_DBsub|||p
677             PL_DBtrace|||p
678             PL_Sv|5.005000||p
679             PL_bufend|5.024000||p
680             PL_bufptr|5.024000||p
681             PL_check||5.006000|
682             PL_compiling|5.004050||p
683             PL_comppad_name||5.017004|
684             PL_comppad||5.008001|
685             PL_copline|5.024000||p
686             PL_curcop|5.004050||p
687             PL_curpad||5.005000|
688             PL_curstash|5.004050||p
689             PL_debstash|5.004050||p
690             PL_defgv|5.004050||p
691             PL_diehook|5.004050||p
692             PL_dirty|5.004050||p
693             PL_dowarn|||p
694             PL_errgv|5.004050||p
695             PL_error_count|5.024000||p
696             PL_expect|5.024000||p
697             PL_hexdigit|5.005000||p
698             PL_hints|5.005000||p
699             PL_in_my_stash|5.024000||p
700             PL_in_my|5.024000||p
701             PL_keyword_plugin||5.011002|
702             PL_laststatval|5.005000||p
703             PL_lex_state|5.024000||p
704             PL_lex_stuff|5.024000||p
705             PL_linestr|5.024000||p
706             PL_modglobal||5.005000|n
707             PL_na|5.004050||pn
708             PL_no_modify|5.006000||p
709             PL_opfreehook||5.011000|n
710             PL_parser|5.009005||p
711             PL_peepp||5.007003|n
712             PL_perl_destruct_level|5.004050||p
713             PL_perldb|5.004050||p
714             PL_ppaddr|5.006000||p
715             PL_rpeepp||5.013005|n
716             PL_rsfp_filters|5.024000||p
717             PL_rsfp|5.024000||p
718             PL_signals|5.008001||p
719             PL_stack_base|5.004050||p
720             PL_stack_sp|5.004050||p
721             PL_statcache|5.005000||p
722             PL_stdingv|5.004050||p
723             PL_sv_arenaroot|5.004050||p
724             PL_sv_no|5.004050||pn
725             PL_sv_undef|5.004050||pn
726             PL_sv_yes|5.004050||pn
727             PL_sv_zero|||n
728             PL_tainted|5.004050||p
729             PL_tainting|5.004050||p
730             PL_tokenbuf|5.024000||p
731             POP_MULTICALL||5.024000|
732             POPi|||n
733             POPl|||n
734             POPn|||n
735             POPpbytex||5.007001|n
736             POPpx||5.005030|n
737             POPp|||n
738             POPs|||n
739             POPul||5.006000|n
740             POPu||5.004000|n
741             PTR2IV|5.006000||p
742             PTR2NV|5.006000||p
743             PTR2UV|5.006000||p
744             PTR2nat|5.009003||p
745             PTR2ul|5.007001||p
746             PTRV|5.006000||p
747             PUSHMARK|||
748             PUSH_MULTICALL||5.024000|
749             PUSHi|||
750             PUSHmortal|5.009002||p
751             PUSHn|||
752             PUSHp|||
753             PUSHs|||
754             PUSHu|5.004000||p
755             PUTBACK|||
756             PadARRAY||5.024000|
757             PadMAX||5.024000|
758             PadlistARRAY||5.024000|
759             PadlistMAX||5.024000|
760             PadlistNAMESARRAY||5.024000|
761             PadlistNAMESMAX||5.024000|
762             PadlistNAMES||5.024000|
763             PadlistREFCNT||5.017004|
764             PadnameLEN||5.024000|
765             PadnamePV||5.024000|
766             PadnameREFCNT_dec||5.024000|
767             PadnameREFCNT||5.024000|
768             PadnameSV||5.024000|
769             PadnameUTF8||5.021007|
770             PadnamelistARRAY||5.024000|
771             PadnamelistMAX||5.024000|
772             PadnamelistREFCNT_dec||5.024000|
773             PadnamelistREFCNT||5.024000|
774             PerlIO_clearerr||5.007003|
775             PerlIO_close||5.007003|
776             PerlIO_context_layers||5.009004|
777             PerlIO_eof||5.007003|
778             PerlIO_error||5.007003|
779             PerlIO_fileno||5.007003|
780             PerlIO_fill||5.007003|
781             PerlIO_flush||5.007003|
782             PerlIO_get_base||5.007003|
783             PerlIO_get_bufsiz||5.007003|
784             PerlIO_get_cnt||5.007003|
785             PerlIO_get_ptr||5.007003|
786             PerlIO_read||5.007003|
787             PerlIO_seek||5.007003|
788             PerlIO_set_cnt||5.007003|
789             PerlIO_set_ptrcnt||5.007003|
790             PerlIO_setlinebuf||5.007003|
791             PerlIO_stderr||5.007003|
792             PerlIO_stdin||5.007003|
793             PerlIO_stdout||5.007003|
794             PerlIO_tell||5.007003|
795             PerlIO_unread||5.007003|
796             PerlIO_write||5.007003|
797             Perl_langinfo|||n
798             Perl_setlocale|||n
799             PoisonFree|5.009004||p
800             PoisonNew|5.009004||p
801             PoisonWith|5.009004||p
802             Poison|5.008000||p
803             READ_XDIGIT||5.017006|
804             REPLACEMENT_CHARACTER_UTF8|||
805             RESTORE_LC_NUMERIC||5.024000|
806             RETVAL|||n
807             Renewc|||
808             Renew|||
809             SAVETMPS|||
810             SAVE_DEFSV|5.004050||p
811             SPAGAIN|||
812             SP|||
813             START_EXTERN_C|5.005000||p
814             START_MY_CXT|5.007003||p
815             STMT_END|||p
816             STMT_START|||p
817             STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000|
818             STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000|
819             STR_WITH_LEN|5.009003||p
820             ST|||
821             SV_CONST_RETURN|5.009003||p
822             SV_COW_DROP_PV|5.008001||p
823             SV_COW_SHARED_HASH_KEYS|5.009005||p
824             SV_GMAGIC|5.007002||p
825             SV_HAS_TRAILING_NUL|5.009004||p
826             SV_IMMEDIATE_UNREF|5.007001||p
827             SV_MUTABLE_RETURN|5.009003||p
828             SV_NOSTEAL|5.009002||p
829             SV_SMAGIC|5.009003||p
830             SV_UTF8_NO_ENCODING|5.008001||p
831             SVfARG|5.009005||p
832             SVf_UTF8|5.006000||p
833             SVf|5.006000||p
834             SVt_INVLIST||5.019002|
835             SVt_IV|||
836             SVt_NULL|||
837             SVt_NV|||
838             SVt_PVAV|||
839             SVt_PVCV|||
840             SVt_PVFM|||
841             SVt_PVGV|||
842             SVt_PVHV|||
843             SVt_PVIO|||
844             SVt_PVIV|||
845             SVt_PVLV|||
846             SVt_PVMG|||
847             SVt_PVNV|||
848             SVt_PV|||
849             SVt_REGEXP||5.011000|
850             Safefree|||
851             StructCopy|||
852             SvCUR_set|||
853             SvCUR|||
854             SvEND|||
855             SvGAMAGIC||5.006001|
856             SvGETMAGIC|5.004050||p
857             SvGROW|||
858             SvIOK_UV||5.006000|
859             SvIOK_notUV||5.006000|
860             SvIOK_off|||
861             SvIOK_only_UV||5.006000|
862             SvIOK_only|||
863             SvIOK_on|||
864             SvIOKp|||
865             SvIOK|||
866             SvIVX|||
867             SvIV_nomg|5.009001||p
868             SvIV_set|||
869             SvIVx|||
870             SvIV|||
871             SvIsCOW_shared_hash||5.008003|
872             SvIsCOW||5.008003|
873             SvLEN_set|||
874             SvLEN|||
875             SvLOCK||5.007003|
876             SvMAGIC_set|5.009003||p
877             SvNIOK_off|||
878             SvNIOKp|||
879             SvNIOK|||
880             SvNOK_off|||
881             SvNOK_only|||
882             SvNOK_on|||
883             SvNOKp|||
884             SvNOK|||
885             SvNVX|||
886             SvNV_nomg||5.013002|
887             SvNV_set|||
888             SvNVx|||
889             SvNV|||
890             SvOK|||
891             SvOOK_offset||5.011000|
892             SvOOK|||
893             SvPOK_off|||
894             SvPOK_only_UTF8||5.006000|
895             SvPOK_only|||
896             SvPOK_on|||
897             SvPOKp|||
898             SvPOK|||
899             SvPVCLEAR|||
900             SvPVX_const|5.009003||p
901             SvPVX_mutable|5.009003||p
902             SvPVX|||
903             SvPV_const|5.009003||p
904             SvPV_flags_const_nolen|5.009003||p
905             SvPV_flags_const|5.009003||p
906             SvPV_flags_mutable|5.009003||p
907             SvPV_flags|5.007002||p
908             SvPV_force_flags_mutable|5.009003||p
909             SvPV_force_flags_nolen|5.009003||p
910             SvPV_force_flags|5.007002||p
911             SvPV_force_mutable|5.009003||p
912             SvPV_force_nolen|5.009003||p
913             SvPV_force_nomg_nolen|5.009003||p
914             SvPV_force_nomg|5.007002||p
915             SvPV_force|||p
916             SvPV_mutable|5.009003||p
917             SvPV_nolen_const|5.009003||p
918             SvPV_nolen|5.006000||p
919             SvPV_nomg_const_nolen|5.009003||p
920             SvPV_nomg_const|5.009003||p
921             SvPV_nomg_nolen|5.013007||p
922             SvPV_nomg|5.007002||p
923             SvPV_renew|5.009003||p
924             SvPV_set|||
925             SvPVbyte_force||5.009002|
926             SvPVbyte_nolen||5.006000|
927             SvPVbytex_force||5.006000|
928             SvPVbytex||5.006000|
929             SvPVbyte|5.006000||p
930             SvPVutf8_force||5.006000|
931             SvPVutf8_nolen||5.006000|
932             SvPVutf8x_force||5.006000|
933             SvPVutf8x||5.006000|
934             SvPVutf8||5.006000|
935             SvPVx|||
936             SvPV|||
937             SvREADONLY_off|||
938             SvREADONLY_on|||
939             SvREADONLY|||
940             SvREFCNT_dec_NN||5.017007|
941             SvREFCNT_dec|||
942             SvREFCNT_inc_NN|5.009004||p
943             SvREFCNT_inc_simple_NN|5.009004||p
944             SvREFCNT_inc_simple_void_NN|5.009004||p
945             SvREFCNT_inc_simple_void|5.009004||p
946             SvREFCNT_inc_simple|5.009004||p
947             SvREFCNT_inc_void_NN|5.009004||p
948             SvREFCNT_inc_void|5.009004||p
949             SvREFCNT_inc|||p
950             SvREFCNT|||
951             SvROK_off|||
952             SvROK_on|||
953             SvROK|||
954             SvRV_set|5.009003||p
955             SvRV|||
956             SvRXOK|5.009005||p
957             SvRX|5.009005||p
958             SvSETMAGIC|||
959             SvSHARED_HASH|5.009003||p
960             SvSHARE||5.007003|
961             SvSTASH_set|5.009003||p
962             SvSTASH|||
963             SvSetMagicSV_nosteal||5.004000|
964             SvSetMagicSV||5.004000|
965             SvSetSV_nosteal||5.004000|
966             SvSetSV|||
967             SvTAINTED_off||5.004000|
968             SvTAINTED_on||5.004000|
969             SvTAINTED||5.004000|
970             SvTAINT|||
971             SvTRUE_nomg||5.013006|
972             SvTRUE|||
973             SvTYPE|||
974             SvUNLOCK||5.007003|
975             SvUOK|5.007001|5.006000|p
976             SvUPGRADE|||
977             SvUTF8_off||5.006000|
978             SvUTF8_on||5.006000|
979             SvUTF8||5.006000|
980             SvUVXx|5.004000||p
981             SvUVX|5.004000||p
982             SvUV_nomg|5.009001||p
983             SvUV_set|5.009003||p
984             SvUVx|5.004000||p
985             SvUV|5.004000||p
986             SvVOK||5.008001|
987             SvVSTRING_mg|5.009004||p
988             THIS|||n
989             UNDERBAR|5.009002||p
990             UNICODE_REPLACEMENT|||p
991             UNLIKELY|||p
992             UTF8SKIP||5.006000|
993             UTF8_ALLOW_ANYUV|||p
994             UTF8_ALLOW_ANY|||p
995             UTF8_ALLOW_CONTINUATION|||p
996             UTF8_ALLOW_EMPTY|||p
997             UTF8_ALLOW_LONG|||p
998             UTF8_ALLOW_NON_CONTINUATION|||p
999             UTF8_ALLOW_OVERFLOW|||p
1000             UTF8_ALLOW_SHORT|||p
1001             UTF8_IS_INVARIANT|||
1002             UTF8_IS_NONCHAR|||
1003             UTF8_IS_SUPER|||
1004             UTF8_IS_SURROGATE|||
1005             UTF8_MAXBYTES|5.009002||p
1006             UTF8_SAFE_SKIP|||p
1007             UVCHR_IS_INVARIANT|||
1008             UVCHR_SKIP||5.022000|
1009             UVSIZE|5.006000||p
1010             UVTYPE|5.006000||p
1011             UVXf|5.007001||p
1012             UVof|5.006000||p
1013             UVuf|5.006000||p
1014             UVxf|5.006000||p
1015             WARN_ALL|5.006000||p
1016             WARN_AMBIGUOUS|5.006000||p
1017             WARN_ASSERTIONS|5.024000||p
1018             WARN_BAREWORD|5.006000||p
1019             WARN_CLOSED|5.006000||p
1020             WARN_CLOSURE|5.006000||p
1021             WARN_DEBUGGING|5.006000||p
1022             WARN_DEPRECATED|5.006000||p
1023             WARN_DIGIT|5.006000||p
1024             WARN_EXEC|5.006000||p
1025             WARN_EXITING|5.006000||p
1026             WARN_GLOB|5.006000||p
1027             WARN_INPLACE|5.006000||p
1028             WARN_INTERNAL|5.006000||p
1029             WARN_IO|5.006000||p
1030             WARN_LAYER|5.008000||p
1031             WARN_MALLOC|5.006000||p
1032             WARN_MISC|5.006000||p
1033             WARN_NEWLINE|5.006000||p
1034             WARN_NUMERIC|5.006000||p
1035             WARN_ONCE|5.006000||p
1036             WARN_OVERFLOW|5.006000||p
1037             WARN_PACK|5.006000||p
1038             WARN_PARENTHESIS|5.006000||p
1039             WARN_PIPE|5.006000||p
1040             WARN_PORTABLE|5.006000||p
1041             WARN_PRECEDENCE|5.006000||p
1042             WARN_PRINTF|5.006000||p
1043             WARN_PROTOTYPE|5.006000||p
1044             WARN_QW|5.006000||p
1045             WARN_RECURSION|5.006000||p
1046             WARN_REDEFINE|5.006000||p
1047             WARN_REGEXP|5.006000||p
1048             WARN_RESERVED|5.006000||p
1049             WARN_SEMICOLON|5.006000||p
1050             WARN_SEVERE|5.006000||p
1051             WARN_SIGNAL|5.006000||p
1052             WARN_SUBSTR|5.006000||p
1053             WARN_SYNTAX|5.006000||p
1054             WARN_TAINT|5.006000||p
1055             WARN_THREADS|5.008000||p
1056             WARN_UNINITIALIZED|5.006000||p
1057             WARN_UNOPENED|5.006000||p
1058             WARN_UNPACK|5.006000||p
1059             WARN_UNTIE|5.006000||p
1060             WARN_UTF8|5.006000||p
1061             WARN_VOID|5.006000||p
1062             WIDEST_UTYPE|5.015004||p
1063             XCPT_CATCH|5.009002||p
1064             XCPT_RETHROW|5.009002||p
1065             XCPT_TRY_END|5.009002||p
1066             XCPT_TRY_START|5.009002||p
1067             XPUSHi|||
1068             XPUSHmortal|5.009002||p
1069             XPUSHn|||
1070             XPUSHp|||
1071             XPUSHs|||
1072             XPUSHu|5.004000||p
1073             XSPROTO|5.010000||p
1074             XSRETURN_EMPTY|||
1075             XSRETURN_IV|||
1076             XSRETURN_NO|||
1077             XSRETURN_NV|||
1078             XSRETURN_PV|||
1079             XSRETURN_UNDEF|||
1080             XSRETURN_UV|5.008001||p
1081             XSRETURN_YES|||
1082             XSRETURN|||p
1083             XST_mIV|||
1084             XST_mNO|||
1085             XST_mNV|||
1086             XST_mPV|||
1087             XST_mUNDEF|||
1088             XST_mUV|5.008001||p
1089             XST_mYES|||
1090             XS_APIVERSION_BOOTCHECK||5.024000|
1091             XS_EXTERNAL||5.024000|
1092             XS_INTERNAL||5.024000|
1093             XS_VERSION_BOOTCHECK||5.024000|
1094             XS_VERSION|||
1095             XSprePUSH|5.006000||p
1096             XS|||
1097             XopDISABLE||5.024000|
1098             XopENABLE||5.024000|
1099             XopENTRYCUSTOM||5.024000|
1100             XopENTRY_set||5.024000|
1101             XopENTRY||5.024000|
1102             XopFLAGS||5.013007|
1103             ZeroD|5.009002||p
1104             Zero|||
1105             __ASSERT_|||p
1106             _aMY_CXT|5.007003||p
1107             _pMY_CXT|5.007003||p
1108             _variant_byte_number|||n
1109             aMY_CXT_|5.007003||p
1110             aMY_CXT|5.007003||p
1111             aTHXR_|5.024000||p
1112             aTHXR|5.024000||p
1113             aTHX_|5.006000||p
1114             aTHX|5.006000||p
1115             amagic_call|||
1116             amagic_deref_call||5.013007|
1117             any_dup|||
1118             atfork_lock||5.007003|n
1119             atfork_unlock||5.007003|n
1120             av_arylen_p||5.009003|
1121             av_clear|||
1122             av_delete||5.006000|
1123             av_exists||5.006000|
1124             av_extend|||
1125             av_fetch|||
1126             av_fill|||
1127             av_iter_p||5.011000|
1128             av_len|||
1129             av_make|||
1130             av_pop|||
1131             av_push|||
1132             av_shift|||
1133             av_store|||
1134             av_tindex|5.017009||p
1135             av_top_index|5.017009||p
1136             av_undef|||
1137             av_unshift|||
1138             ax|||n
1139             block_end||5.004000|
1140             block_gimme||5.004000|
1141             block_start||5.004000|
1142             blockhook_register||5.013003|
1143             boolSV|5.004000||p
1144             bytes_cmp_utf8||5.013007|
1145             cBOOL|5.013000||p
1146             call_argv|5.006000||p
1147             call_atexit||5.006000|
1148             call_list||5.004000|
1149             call_method|5.006000||p
1150             call_pv|5.006000||p
1151             call_sv|5.006000||p
1152             caller_cx|5.013005|5.006000|p
1153             calloc||5.007002|n
1154             cast_i32||5.006000|n
1155             cast_iv||5.006000|n
1156             cast_ulong||5.006000|n
1157             cast_uv||5.006000|n
1158             ckWARN2_d|||
1159             ckWARN2|||
1160             ckWARN3_d|||
1161             ckWARN3|||
1162             ckWARN4_d|||
1163             ckWARN4|||
1164             ckWARN_d|||
1165             ckWARN|5.006000||p
1166             ck_entersub_args_list||5.013006|
1167             ck_entersub_args_proto_or_list||5.013006|
1168             ck_entersub_args_proto||5.013006|
1169             ck_warner_d||5.011001|v
1170             ck_warner||5.011001|v
1171             ckwarn_d||5.009003|
1172             ckwarn||5.009003|
1173             clear_defarray||5.023008|
1174             clone_params_del|||n
1175             clone_params_new|||n
1176             cop_hints_2hv||5.013007|
1177             cop_hints_fetch_pvn||5.013007|
1178             cop_hints_fetch_pvs||5.013007|
1179             cop_hints_fetch_pv||5.013007|
1180             cop_hints_fetch_sv||5.013007|
1181             cophh_2hv||5.013007|
1182             cophh_copy||5.013007|
1183             cophh_delete_pvn||5.013007|
1184             cophh_delete_pvs||5.013007|
1185             cophh_delete_pv||5.013007|
1186             cophh_delete_sv||5.013007|
1187             cophh_fetch_pvn||5.013007|
1188             cophh_fetch_pvs||5.013007|
1189             cophh_fetch_pv||5.013007|
1190             cophh_fetch_sv||5.013007|
1191             cophh_free||5.013007|
1192             cophh_new_empty||5.024000|
1193             cophh_store_pvn||5.013007|
1194             cophh_store_pvs||5.013007|
1195             cophh_store_pv||5.013007|
1196             cophh_store_sv||5.013007|
1197             croak_memory_wrap|5.019003||pn
1198             croak_no_modify_sv|||p
1199             croak_no_modify|5.013003||pn
1200             croak_nocontext|||pvn
1201             croak_sv|5.013001||p
1202             croak_xs_usage|5.010001||pn
1203             croak|||v
1204             csighandler||5.009003|n
1205             custom_op_desc||5.007003|
1206             custom_op_name||5.007003|
1207             custom_op_register||5.013007|
1208             custom_op_xop||5.013007|
1209             cv_clone|||
1210             cv_const_sv||5.003070|n
1211             cv_get_call_checker_flags|||
1212             cv_get_call_checker||5.013006|
1213             cv_name||5.021005|
1214             cv_set_call_checker_flags||5.021004|
1215             cv_set_call_checker||5.013006|
1216             cv_undef|||
1217             cx_dump||5.005000|
1218             cx_dup|||
1219             cxinc|||
1220             dAXMARK|5.009003||p
1221             dAX|5.007002||p
1222             dITEMS|5.007002||p
1223             dMARK|||
1224             dMULTICALL||5.009003|
1225             dMY_CXT_SV|5.007003||p
1226             dMY_CXT|5.007003||p
1227             dNOOP|5.006000||p
1228             dORIGMARK|||
1229             dSP|||
1230             dTHR|5.004050||p
1231             dTHXR|5.024000||p
1232             dTHXa|5.006000||p
1233             dTHXoa|5.006000||p
1234             dTHX|5.006000||p
1235             dUNDERBAR|5.009002||p
1236             dVAR|5.009003||p
1237             dXCPT|5.009002||p
1238             dXSARGS|||
1239             dXSI32|||
1240             dXSTARG|5.006000||p
1241             deb_nocontext|||vn
1242             debop||5.005000|
1243             debprofdump||5.005000|
1244             debstackptrs||5.007003|
1245             debstack||5.007003|
1246             deb||5.007003|v
1247             delimcpy||5.004000|n
1248             despatch_signals||5.007001|
1249             die_nocontext|||vn
1250             die_sv|5.013001||p
1251             die|||v
1252             dirp_dup|||
1253             do_aspawn|||
1254             do_binmode||5.004050|
1255             do_close|||
1256             do_gv_dump||5.006000|
1257             do_gvgv_dump||5.006000|
1258             do_hv_dump||5.006000|
1259             do_join|||
1260             do_magic_dump||5.006000|
1261             do_op_dump||5.006000|
1262             do_open9||5.006000|
1263             do_openn||5.007001|
1264             do_open||5.003070|
1265             do_pmop_dump||5.006000|
1266             do_spawn_nowait|||
1267             do_spawn|||
1268             do_sprintf|||
1269             do_sv_dump||5.006000|
1270             doing_taint||5.008001|n
1271             doref||5.009003|
1272             dounwind|||
1273             dowantarray|||
1274             dump_all||5.006000|
1275             dump_c_backtrace|||
1276             dump_eval||5.006000|
1277             dump_form||5.006000|
1278             dump_indent||5.006000|v
1279             dump_mstats|||
1280             dump_packsubs||5.006000|
1281             dump_sub||5.006000|
1282             dump_vindent||5.006000|
1283             eval_pv|5.006000||p
1284             eval_sv|5.006000||p
1285             fbm_compile||5.005000|
1286             fbm_instr||5.005000|
1287             filter_add|||
1288             filter_del|||
1289             filter_read|||
1290             find_runcv||5.008001|
1291             find_rundefsvoffset||5.009002|
1292             find_rundefsv||5.013002|
1293             foldEQ_latin1||5.013008|n
1294             foldEQ_locale||5.013002|n
1295             foldEQ_utf8||5.013002|
1296             foldEQ||5.013002|n
1297             form_nocontext|||vn
1298             form||5.004000|v
1299             fp_dup|||
1300             fprintf_nocontext|||vn
1301             free_global_struct|||
1302             free_tmps|||
1303             get_av|5.006000||p
1304             get_c_backtrace_dump|||
1305             get_context||5.006000|n
1306             get_cvn_flags|5.009005||p
1307             get_cvs|5.011000||p
1308             get_cv|5.006000||p
1309             get_hv|5.006000||p
1310             get_mstats|||
1311             get_op_descs||5.005000|
1312             get_op_names||5.005000|
1313             get_ppaddr||5.006000|
1314             get_sv|5.006000||p
1315             get_vtbl||5.005030|
1316             getcwd_sv||5.007002|
1317             gp_dup|||
1318             gp_free|||
1319             gp_ref|||
1320             grok_bin|5.007003||p
1321             grok_hex|5.007003||p
1322             grok_infnan||5.021004|
1323             grok_number_flags||5.021002|
1324             grok_number|5.007002||p
1325             grok_numeric_radix|5.007002||p
1326             grok_oct|5.007003||p
1327             gv_AVadd|||
1328             gv_HVadd|||
1329             gv_IOadd|||
1330             gv_SVadd|||
1331             gv_add_by_type||5.011000|
1332             gv_autoload4||5.004000|
1333             gv_autoload_pvn||5.015004|
1334             gv_autoload_pv||5.015004|
1335             gv_autoload_sv||5.015004|
1336             gv_check|||
1337             gv_const_sv||5.009003|
1338             gv_display|||
1339             gv_dump||5.006000|
1340             gv_efullname3||5.003070|
1341             gv_efullname4||5.006001|
1342             gv_efullname|||
1343             gv_fetchfile_flags||5.009005|
1344             gv_fetchfile|||
1345             gv_fetchmeth_autoload||5.007003|
1346             gv_fetchmeth_pv_autoload||5.015004|
1347             gv_fetchmeth_pvn_autoload||5.015004|
1348             gv_fetchmeth_pvn||5.015004|
1349             gv_fetchmeth_pv||5.015004|
1350             gv_fetchmeth_sv_autoload||5.015004|
1351             gv_fetchmeth_sv||5.015004|
1352             gv_fetchmethod_autoload||5.004000|
1353             gv_fetchmethod_flags|||p
1354             gv_fetchmethod|||
1355             gv_fetchmeth|||
1356             gv_fetchpvn_flags|5.009002||p
1357             gv_fetchpvn|||p
1358             gv_fetchpvs|5.009004||p
1359             gv_fetchpv|||
1360             gv_fetchsv|5.009002||p
1361             gv_fullname3||5.003070|
1362             gv_fullname4||5.006001|
1363             gv_fullname|||
1364             gv_handler||5.007001|
1365             gv_init_pvn|5.015004||p
1366             gv_init_pv|5.015004||p
1367             gv_init_sv|5.015004||p
1368             gv_init|||
1369             gv_name_set||5.009004|
1370             gv_stashpvn|5.003070||p
1371             gv_stashpvs|5.009003||p
1372             gv_stashpv|||
1373             gv_stashsv|||
1374             he_dup|||
1375             hek_dup|||
1376             hv_assert|||
1377             hv_clear_placeholders||5.009001|
1378             hv_clear|||
1379             hv_common_key_len||5.010000|
1380             hv_common||5.010000|
1381             hv_copy_hints_hv||5.009004|
1382             hv_delayfree_ent||5.004000|
1383             hv_delete_ent||5.003070|
1384             hv_delete|||
1385             hv_eiter_p||5.009003|
1386             hv_eiter_set||5.009003|
1387             hv_exists_ent||5.003070|
1388             hv_exists|||
1389             hv_fetch_ent||5.003070|
1390             hv_fetchs|5.009003||p
1391             hv_fetch|||
1392             hv_fill||5.013002|
1393             hv_free_ent||5.004000|
1394             hv_iterinit|||
1395             hv_iterkeysv||5.003070|
1396             hv_iterkey|||
1397             hv_iternextsv|||
1398             hv_iternext|||
1399             hv_iterval|||
1400             hv_ksplit||5.003070|
1401             hv_magic|||
1402             hv_name_set||5.009003|
1403             hv_placeholders_get||5.009003|
1404             hv_placeholders_set||5.009003|
1405             hv_rand_set||5.018000|
1406             hv_riter_p||5.009003|
1407             hv_riter_set||5.009003|
1408             hv_scalar||5.009001|
1409             hv_store_ent||5.003070|
1410             hv_stores|5.009004||p
1411             hv_store|||
1412             hv_undef|||
1413             ibcmp_locale||5.004000|
1414             ibcmp_utf8||5.007003|
1415             ibcmp|||
1416             init_global_struct|||
1417             init_stacks||5.005000|
1418             init_tm||5.007002|
1419             instr|||n
1420             intro_my||5.004000|
1421             isALNUMC_A|||p
1422             isALNUMC|5.006000||p
1423             isALNUM_A|||p
1424             isALNUM|||p
1425             isALPHANUMERIC_A|||p
1426             isALPHANUMERIC|5.017008||p
1427             isALPHA_A|||p
1428             isALPHA|||p
1429             isASCII_A|||p
1430             isASCII|5.006000||p
1431             isBLANK_A|||p
1432             isBLANK|5.006001||p
1433             isC9_STRICT_UTF8_CHAR|||n
1434             isCNTRL_A|||p
1435             isCNTRL|5.006000||p
1436             isDIGIT_A|||p
1437             isDIGIT|||p
1438             isGRAPH_A|||p
1439             isGRAPH|5.006000||p
1440             isGV_with_GP|||p
1441             isIDCONT_A|||p
1442             isIDCONT|5.017008||p
1443             isIDFIRST_A|||p
1444             isIDFIRST|||p
1445             isLOWER_A|||p
1446             isLOWER|||p
1447             isOCTAL_A|||p
1448             isOCTAL|5.013005||p
1449             isPRINT_A|||p
1450             isPRINT|5.004000||p
1451             isPSXSPC_A|||p
1452             isPSXSPC|5.006001||p
1453             isPUNCT_A|||p
1454             isPUNCT|5.006000||p
1455             isSPACE_A|||p
1456             isSPACE|||p
1457             isSTRICT_UTF8_CHAR|||n
1458             isUPPER_A|||p
1459             isUPPER|||p
1460             isUTF8_CHAR_flags|||
1461             isUTF8_CHAR||5.021001|n
1462             isWORDCHAR_A|||p
1463             isWORDCHAR|5.013006||p
1464             isXDIGIT_A|||p
1465             isXDIGIT|5.006000||p
1466             is_ascii_string||5.011000|n
1467             is_c9strict_utf8_string_loclen|||n
1468             is_c9strict_utf8_string_loc|||n
1469             is_c9strict_utf8_string|||n
1470             is_invariant_string||5.021007|n
1471             is_lvalue_sub||5.007001|
1472             is_safe_syscall||5.019004|
1473             is_strict_utf8_string_loclen|||n
1474             is_strict_utf8_string_loc|||n
1475             is_strict_utf8_string|||n
1476             is_utf8_char_buf||5.015008|n
1477             is_utf8_fixed_width_buf_flags|||n
1478             is_utf8_fixed_width_buf_loc_flags|||n
1479             is_utf8_fixed_width_buf_loclen_flags|||n
1480             is_utf8_invariant_string_loc|||n
1481             is_utf8_invariant_string|||n
1482             is_utf8_string_flags|||n
1483             is_utf8_string_loc_flags|||n
1484             is_utf8_string_loclen_flags|||n
1485             is_utf8_string_loclen||5.009003|n
1486             is_utf8_string_loc||5.008001|n
1487             is_utf8_string||5.006001|n
1488             is_utf8_valid_partial_char_flags|||n
1489             is_utf8_valid_partial_char|||n
1490             isinfnan||5.021004|n
1491             items|||n
1492             ix|||n
1493             leave_scope|||
1494             lex_stuff_pvs||5.013005|
1495             load_module_nocontext|||vn
1496             load_module|5.006000||pv
1497             looks_like_number|||
1498             mPUSHi|5.009002||p
1499             mPUSHn|5.009002||p
1500             mPUSHp|5.009002||p
1501             mPUSHs|5.010001||p
1502             mPUSHu|5.009002||p
1503             mXPUSHi|5.009002||p
1504             mXPUSHn|5.009002||p
1505             mXPUSHp|5.009002||p
1506             mXPUSHs|5.010001||p
1507             mXPUSHu|5.009002||p
1508             magic_dump||5.006000|
1509             malloc||5.007002|n
1510             markstack_grow||5.021001|
1511             memEQs|5.009005||p
1512             memEQ|5.004000||p
1513             memNEs|5.009005||p
1514             memNE|5.004000||p
1515             mess_nocontext|||pvn
1516             mess_sv|5.013001||p
1517             mess|5.006000||pv
1518             mfree||5.007002|n
1519             mg_clear|||
1520             mg_copy|||
1521             mg_dup|||
1522             mg_findext|5.013008||pn
1523             mg_find|||n
1524             mg_free_type||5.013006|
1525             mg_freeext|||
1526             mg_free|||
1527             mg_get|||
1528             mg_magical|||n
1529             mg_set|||
1530             mg_size||5.005000|
1531             mini_mktime||5.007002|n
1532             moreswitches|||
1533             mro_get_from_name||5.010001|
1534             mro_get_linear_isa||5.009005|
1535             mro_get_private_data||5.010001|
1536             mro_isa_changed_in|||
1537             mro_method_changed_in||5.009005|
1538             mro_register||5.010001|
1539             mro_set_mro||5.010001|
1540             mro_set_private_data||5.010001|
1541             my_atof2||5.007002|
1542             my_atof3|||
1543             my_atof||5.006000|
1544             my_chsize|||
1545             my_cxt_index|||
1546             my_cxt_init|||
1547             my_dirfd||5.009005|n
1548             my_exit|||
1549             my_failure_exit||5.004000|
1550             my_fflush_all||5.006000|
1551             my_fork||5.007003|n
1552             my_lstat||5.024000|
1553             my_pclose||5.003070|
1554             my_popen_list||5.007001|
1555             my_popen||5.003070|
1556             my_setenv|||
1557             my_snprintf|5.009004||pvn
1558             my_socketpair||5.007003|n
1559             my_sprintf|5.009003||pvn
1560             my_stat||5.024000|
1561             my_strftime||5.007002|
1562             my_strlcat|5.009004||pn
1563             my_strlcpy|5.009004||pn
1564             my_strnlen|||pn
1565             my_strtod|||n
1566             my_vsnprintf||5.009004|n
1567             newANONATTRSUB||5.006000|
1568             newANONHASH|||
1569             newANONLIST|||
1570             newANONSUB|||
1571             newASSIGNOP|||
1572             newATTRSUB||5.006000|
1573             newAVREF|||
1574             newAV|||
1575             newBINOP|||
1576             newCONDOP|||
1577             newCONSTSUB_flags||5.015006|
1578             newCONSTSUB|5.004050||p
1579             newCVREF|||
1580             newDEFSVOP||5.021006|
1581             newFORM|||
1582             newFOROP||5.013007|
1583             newGIVENOP||5.009003|
1584             newGVOP|||
1585             newGVREF|||
1586             newGVgen_flags||5.015004|
1587             newGVgen|||
1588             newHVREF|||
1589             newHVhv||5.005000|
1590             newHV|||
1591             newIO|||
1592             newLISTOP|||
1593             newLOGOP|||
1594             newLOOPEX|||
1595             newLOOPOP|||
1596             newMETHOP_named||5.021005|
1597             newMETHOP||5.021005|
1598             newMYSUB||5.017004|
1599             newNULLLIST|||
1600             newOP|||
1601             newPADOP|||
1602             newPMOP|||
1603             newPROG|||
1604             newPVOP|||
1605             newRANGE|||
1606             newRV_inc|5.004000||p
1607             newRV_noinc|5.004000||p
1608             newRV|||
1609             newSLICEOP|||
1610             newSTATEOP|||
1611             newSUB|||
1612             newSVOP|||
1613             newSVREF|||
1614             newSV_type|5.009005||p
1615             newSVhek||5.009003|
1616             newSViv|||
1617             newSVnv|||
1618             newSVpadname||5.017004|
1619             newSVpv_share||5.013006|
1620             newSVpvf_nocontext|||vn
1621             newSVpvf||5.004000|v
1622             newSVpvn_flags|5.010001||p
1623             newSVpvn_share|5.007001||p
1624             newSVpvn_utf8|5.010001||p
1625             newSVpvn|5.004050||p
1626             newSVpvs_flags|5.010001||p
1627             newSVpvs_share|5.009003||p
1628             newSVpvs|5.009003||p
1629             newSVpv|||
1630             newSVrv|||
1631             newSVsv_flags|||
1632             newSVsv_nomg|||
1633             newSVsv|||
1634             newSVuv|5.006000||p
1635             newSV|||
1636             newUNOP_AUX||5.021007|
1637             newUNOP|||
1638             newWHENOP||5.009003|
1639             newWHILEOP||5.013007|
1640             newXSproto||5.006000|
1641             newXS||5.006000|
1642             new_stackinfo||5.005000|
1643             new_version||5.009000|
1644             ninstr|||n
1645             nothreadhook||5.008000|
1646             op_append_elem||5.013006|
1647             op_append_list||5.013006|
1648             op_class|||
1649             op_contextualize||5.013006|
1650             op_convert_list||5.021006|
1651             op_dump||5.006000|
1652             op_free|||
1653             op_linklist||5.013006|
1654             op_null||5.007002|
1655             op_parent||5.021002|n
1656             op_prepend_elem||5.013006|
1657             op_refcnt_lock||5.009002|
1658             op_refcnt_unlock||5.009002|
1659             op_sibling_splice||5.021002|n
1660             pMY_CXT_|5.007003||p
1661             pMY_CXT|5.007003||p
1662             pTHX_|5.006000||p
1663             pTHX|5.006000||p
1664             packWARN|5.007003||p
1665             pack_cat||5.007003|
1666             packlist||5.008001|
1667             pad_add_anon||5.008001|
1668             pad_add_name_pvn||5.015001|
1669             pad_add_name_pvs||5.015001|
1670             pad_add_name_pv||5.015001|
1671             pad_add_name_sv||5.015001|
1672             pad_compname_type||5.009003|
1673             pad_findmy_pvn||5.015001|
1674             pad_findmy_pvs||5.015001|
1675             pad_findmy_pv||5.015001|
1676             pad_findmy_sv||5.015001|
1677             pad_new||5.008001|
1678             pad_setsv|||
1679             pad_sv|||
1680             parser_dup|||
1681             perl_alloc_using|||n
1682             perl_alloc|||n
1683             perl_clone_using|||n
1684             perl_clone|||n
1685             perl_construct|||n
1686             perl_destruct||5.007003|n
1687             perl_free|||n
1688             perl_parse||5.006000|n
1689             perl_run|||n
1690             pmop_dump||5.006000|
1691             pop_scope|||
1692             pregcomp||5.009005|
1693             pregexec|||
1694             pregfree2||5.011000|
1695             pregfree|||
1696             prep_ffi_ret|||
1697             prep_ffi_sig|||
1698             prescan_version||5.011004|
1699             printf_nocontext|||vn
1700             ptr_table_fetch||5.009005|
1701             ptr_table_free||5.009005|
1702             ptr_table_new||5.009005|
1703             ptr_table_split||5.009005|
1704             ptr_table_store||5.009005|
1705             push_scope|||
1706             pv_display|5.006000||p
1707             pv_escape|5.009004||p
1708             pv_pretty|5.009004||p
1709             pv_uni_display||5.007003|
1710             quadmath_format_needed|||n
1711             quadmath_format_single|||n
1712             re_compile||5.009005|
1713             re_dup_guts|||
1714             re_intuit_start||5.019001|
1715             re_intuit_string||5.006000|
1716             realloc||5.007002|n
1717             reentrant_free||5.024000|
1718             reentrant_init||5.024000|
1719             reentrant_retry||5.024000|vn
1720             reentrant_size||5.024000|
1721             ref||5.024000|
1722             reg_named_buff_all||5.009005|
1723             reg_named_buff_exists||5.009005|
1724             reg_named_buff_fetch||5.009005|
1725             reg_named_buff_firstkey||5.009005|
1726             reg_named_buff_nextkey||5.009005|
1727             reg_named_buff_scalar||5.009005|
1728             regdump||5.005000|
1729             regdupe_internal|||
1730             regexec_flags||5.005000|
1731             regfree_internal||5.009005|
1732             reginitcolors||5.006000|
1733             regnext||5.005000|
1734             repeatcpy|||n
1735             require_pv||5.006000|
1736             rninstr|||n
1737             rsignal_state||5.004000|
1738             rsignal||5.004000|
1739             runops_debug||5.005000|
1740             runops_standard||5.005000|
1741             rv2cv_op_cv||5.013006|
1742             rvpv_dup|||
1743             safesyscalloc||5.006000|n
1744             safesysfree||5.006000|n
1745             safesysmalloc||5.006000|n
1746             safesysrealloc||5.006000|n
1747             save_I16||5.004000|
1748             save_I32|||
1749             save_I8||5.006000|
1750             save_adelete||5.011000|
1751             save_aelem_flags||5.011000|
1752             save_aelem||5.004050|
1753             save_alloc||5.006000|
1754             save_aptr|||
1755             save_ary|||
1756             save_bool||5.008001|
1757             save_clearsv|||
1758             save_delete|||
1759             save_destructor_x||5.006000|
1760             save_destructor||5.006000|
1761             save_freeop|||
1762             save_freepv|||
1763             save_freesv|||
1764             save_generic_pvref||5.006001|
1765             save_generic_svref||5.005030|
1766             save_gp||5.004000|
1767             save_hash|||
1768             save_hdelete||5.011000|
1769             save_helem_flags||5.011000|
1770             save_helem||5.004050|
1771             save_hints||5.010001|
1772             save_hptr|||
1773             save_int|||
1774             save_item|||
1775             save_iv||5.005000|
1776             save_list|||
1777             save_long|||
1778             save_mortalizesv||5.007001|
1779             save_nogv|||
1780             save_op||5.005000|
1781             save_padsv_and_mortalize||5.010001|
1782             save_pptr|||
1783             save_pushi32ptr||5.010001|
1784             save_pushptrptr||5.010001|
1785             save_pushptr||5.010001|
1786             save_re_context||5.006000|
1787             save_scalar|||
1788             save_set_svflags||5.009000|
1789             save_shared_pvref||5.007003|
1790             save_sptr|||
1791             save_svref|||
1792             save_vptr||5.006000|
1793             savepvn|||
1794             savepvs||5.009003|
1795             savepv|||
1796             savesharedpvn||5.009005|
1797             savesharedpvs||5.013006|
1798             savesharedpv||5.007003|
1799             savesharedsvpv||5.013006|
1800             savestack_grow_cnt||5.008001|
1801             savestack_grow|||
1802             savesvpv||5.009002|
1803             scan_bin||5.006000|
1804             scan_hex|||
1805             scan_num||5.007001|
1806             scan_oct|||
1807             scan_version||5.009001|
1808             scan_vstring||5.009005|
1809             seed||5.008001|
1810             set_context||5.006000|n
1811             setdefout|||
1812             share_hek||5.004000|
1813             si_dup|||
1814             sortsv_flags||5.009003|
1815             sortsv||5.007003|
1816             ss_dup|||
1817             stack_grow|||
1818             start_subparse||5.004000|
1819             strEQ|||
1820             strGE|||
1821             strGT|||
1822             strLE|||
1823             strLT|||
1824             strNE|||
1825             str_to_version||5.006000|
1826             strnEQ|||
1827             strnNE|||
1828             sv_2bool_flags||5.013006|
1829             sv_2bool|||
1830             sv_2cv|||
1831             sv_2io|||
1832             sv_2iv_flags||5.009001|
1833             sv_2iv|||
1834             sv_2mortal|||
1835             sv_2nv_flags||5.013001|
1836             sv_2pv_flags|5.007002||p
1837             sv_2pv_nolen|5.006000||p
1838             sv_2pvbyte_nolen|5.006000||p
1839             sv_2pvbyte|5.006000||p
1840             sv_2pvutf8_nolen||5.006000|
1841             sv_2pvutf8||5.006000|
1842             sv_2pv|||
1843             sv_2uv_flags||5.009001|
1844             sv_2uv|5.004000||p
1845             sv_backoff|||n
1846             sv_bless|||
1847             sv_cat_decode||5.008001|
1848             sv_catpv_flags||5.013006|
1849             sv_catpv_mg|5.004050||p
1850             sv_catpv_nomg||5.013006|
1851             sv_catpvf_mg_nocontext|||pvn
1852             sv_catpvf_mg|5.006000|5.004000|pv
1853             sv_catpvf_nocontext|||vn
1854             sv_catpvf||5.004000|v
1855             sv_catpvn_flags||5.007002|
1856             sv_catpvn_mg|5.004050||p
1857             sv_catpvn_nomg|5.007002||p
1858             sv_catpvn|||
1859             sv_catpvs_flags||5.013006|
1860             sv_catpvs_mg||5.013006|
1861             sv_catpvs_nomg||5.013006|
1862             sv_catpvs|5.009003||p
1863             sv_catpv|||
1864             sv_catsv_flags||5.007002|
1865             sv_catsv_mg|5.004050||p
1866             sv_catsv_nomg|5.007002||p
1867             sv_catsv|||
1868             sv_chop|||
1869             sv_clear|||
1870             sv_cmp_flags||5.013006|
1871             sv_cmp_locale_flags||5.013006|
1872             sv_cmp_locale||5.004000|
1873             sv_cmp|||
1874             sv_collxfrm_flags||5.013006|
1875             sv_collxfrm|||
1876             sv_copypv_flags||5.017002|
1877             sv_copypv_nomg||5.017002|
1878             sv_copypv|||
1879             sv_dec_nomg||5.013002|
1880             sv_dec|||
1881             sv_derived_from_pvn||5.015004|
1882             sv_derived_from_pv||5.015004|
1883             sv_derived_from_sv||5.015004|
1884             sv_derived_from||5.004000|
1885             sv_destroyable||5.010000|
1886             sv_does_pvn||5.015004|
1887             sv_does_pv||5.015004|
1888             sv_does_sv||5.015004|
1889             sv_does||5.009004|
1890             sv_dump|||
1891             sv_dup_inc|||
1892             sv_dup|||
1893             sv_eq_flags||5.013006|
1894             sv_eq|||
1895             sv_force_normal_flags||5.007001|
1896             sv_force_normal||5.006000|
1897             sv_free|||
1898             sv_gets||5.003070|
1899             sv_grow|||
1900             sv_inc_nomg||5.013002|
1901             sv_inc|||
1902             sv_insert_flags||5.010001|
1903             sv_insert|||
1904             sv_isa|||
1905             sv_isobject|||
1906             sv_iv||5.005000|
1907             sv_len_utf8||5.006000|
1908             sv_len|||
1909             sv_magic_portable|5.024000|5.004000|p
1910             sv_magicext||5.007003|
1911             sv_magic|||
1912             sv_mortalcopy|||
1913             sv_newmortal|||
1914             sv_newref|||
1915             sv_nolocking||5.007003|
1916             sv_nosharing||5.007003|
1917             sv_nounlocking|||
1918             sv_nv||5.005000|
1919             sv_peek||5.005000|
1920             sv_pos_b2u_flags||5.019003|
1921             sv_pos_u2b_flags||5.011005|
1922             sv_pvbyten_force||5.006000|
1923             sv_pvbyten||5.006000|
1924             sv_pvbyte||5.006000|
1925             sv_pvn_force_flags|5.007002||p
1926             sv_pvn_force|||
1927             sv_pvn_nomg|5.007003|5.005000|p
1928             sv_pvn||5.005000|
1929             sv_pvutf8n_force||5.006000|
1930             sv_pvutf8n||5.006000|
1931             sv_pvutf8||5.006000|
1932             sv_pv||5.006000|
1933             sv_recode_to_utf8||5.007003|
1934             sv_reftype|||
1935             sv_ref|||
1936             sv_replace|||
1937             sv_report_used|||
1938             sv_reset|||
1939             sv_rvunweaken|||
1940             sv_rvweaken||5.006000|
1941             sv_set_undef|||
1942             sv_setiv_mg|5.004050||p
1943             sv_setiv|||
1944             sv_setnv_mg|5.006000||p
1945             sv_setnv|||
1946             sv_setpv_bufsize|||
1947             sv_setpv_mg|5.004050||p
1948             sv_setpvf_mg_nocontext|||pvn
1949             sv_setpvf_mg|5.006000|5.004000|pv
1950             sv_setpvf_nocontext|||vn
1951             sv_setpvf||5.004000|v
1952             sv_setpviv_mg||5.008001|
1953             sv_setpviv||5.008001|
1954             sv_setpvn_mg|5.004050||p
1955             sv_setpvn|||
1956             sv_setpvs_mg||5.013006|
1957             sv_setpvs|5.009004||p
1958             sv_setpv|||
1959             sv_setref_iv|||
1960             sv_setref_nv|||
1961             sv_setref_pvn|||
1962             sv_setref_pvs||5.024000|
1963             sv_setref_pv|||
1964             sv_setref_uv||5.007001|
1965             sv_setsv_flags||5.007002|
1966             sv_setsv_mg|5.004050||p
1967             sv_setsv_nomg|5.007002||p
1968             sv_setsv|||
1969             sv_setuv_mg|5.004050||p
1970             sv_setuv|5.004000||p
1971             sv_string_from_errnum|||
1972             sv_tainted||5.004000|
1973             sv_taint||5.004000|
1974             sv_true||5.005000|
1975             sv_uni_display||5.007003|
1976             sv_unmagicext|5.013008||p
1977             sv_unmagic|||
1978             sv_unref_flags||5.007001|
1979             sv_unref|||
1980             sv_untaint||5.004000|
1981             sv_upgrade|||
1982             sv_usepvn_flags||5.009004|
1983             sv_usepvn_mg|5.004050||p
1984             sv_usepvn|||
1985             sv_utf8_decode||5.006000|
1986             sv_utf8_downgrade||5.006000|
1987             sv_utf8_encode||5.006000|
1988             sv_utf8_upgrade_flags_grow||5.011000|
1989             sv_utf8_upgrade_flags||5.007002|
1990             sv_utf8_upgrade_nomg||5.007002|
1991             sv_utf8_upgrade||5.007001|
1992             sv_uv|5.005000||p
1993             sv_vcatpvf_mg|5.006000|5.004000|p
1994             sv_vcatpvfn_flags||5.017002|
1995             sv_vcatpvfn||5.004000|
1996             sv_vcatpvf|5.006000|5.004000|p
1997             sv_vsetpvf_mg|5.006000|5.004000|p
1998             sv_vsetpvfn||5.004000|
1999             sv_vsetpvf|5.006000|5.004000|p
2000             svtype|||
2001             switch_to_global_locale|||n
2002             sync_locale||5.021004|n
2003             sys_init3||5.010000|n
2004             sys_init||5.010000|n
2005             sys_intern_clear|||
2006             sys_intern_dup|||
2007             sys_intern_init|||
2008             sys_term||5.010000|n
2009             taint_env|||
2010             taint_proper|||
2011             toFOLD_utf8_safe|||
2012             toFOLD_utf8||5.019001|
2013             toFOLD_uvchr||5.023009|
2014             toFOLD||5.019001|
2015             toLOWER_L1||5.019001|
2016             toLOWER_LC||5.004000|
2017             toLOWER_utf8_safe|||
2018             toLOWER_utf8||5.015007|
2019             toLOWER_uvchr||5.023009|
2020             toLOWER|||
2021             toTITLE_utf8_safe|||
2022             toTITLE_utf8||5.015007|
2023             toTITLE_uvchr||5.023009|
2024             toTITLE||5.019001|
2025             toUPPER_utf8_safe|||
2026             toUPPER_utf8||5.015007|
2027             toUPPER_uvchr||5.023009|
2028             toUPPER|||
2029             unlnk|||
2030             unpack_str||5.007003|
2031             unpackstring||5.008001|
2032             unsharepvn||5.003070|
2033             upg_version||5.009005|
2034             utf8_distance||5.006000|
2035             utf8_hop_back|||n
2036             utf8_hop_forward|||n
2037             utf8_hop_safe|||n
2038             utf8_hop||5.006000|n
2039             utf8_length||5.007001|
2040             utf8_to_uvchr_buf|5.015009||p
2041             utf8_to_uvchr|5.007001||p
2042             utf8n_to_uvchr_error|||n
2043             utf8n_to_uvchr||5.007001|n
2044             utf8n_to_uvuni||5.007001|
2045             uvchr_to_utf8_flags||5.007003|
2046             uvchr_to_utf8||5.007001|
2047             uvoffuni_to_utf8_flags||5.019004|
2048             uvuni_to_utf8_flags||5.007003|
2049             uvuni_to_utf8||5.007001|
2050             valid_utf8_to_uvchr||5.015009|n
2051             vcmp||5.009000|
2052             vcroak||5.006000|
2053             vdeb||5.007003|
2054             vform||5.006000|
2055             vload_module|5.006000||p
2056             vmess|5.006000||p
2057             vnewSVpvf|5.006000|5.004000|p
2058             vnormal||5.009002|
2059             vnumify||5.009000|
2060             vstringify||5.009000|
2061             vverify||5.009003|
2062             vwarner||5.006000|
2063             vwarn||5.006000|
2064             warn_nocontext|||pvn
2065             warn_sv|5.013001||p
2066             warner_nocontext|||vn
2067             warner|5.006000|5.004000|pv
2068             warn|||v
2069             whichsig_pvn||5.015004|
2070             whichsig_pv||5.015004|
2071             whichsig_sv||5.015004|
2072             whichsig|||
2073             wrap_op_checker||5.015008|
2074             );
2075              
2076             if (exists $opt{'list-unsupported'}) {
2077             my $f;
2078             for $f (sort { lc $a cmp lc $b } keys %API) {
2079             next unless $API{$f}{todo};
2080             print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
2081             }
2082             exit 0;
2083             }
2084              
2085             # Scan for possible replacement candidates
2086              
2087             my(%replace, %need, %hints, %warnings, %depends);
2088             my $replace = 0;
2089             my($hint, $define, $function);
2090              
2091             sub find_api
2092             {
2093             my $code = shift;
2094             $code =~ s{
2095             / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
2096             | "[^"\\]*(?:\\.[^"\\]*)*"
2097             | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
2098             grep { exists $API{$_} } $code =~ /(\w+)/mg;
2099             }
2100              
2101             while () {
2102             if ($hint) {
2103             my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
2104             if (m{^\s*\*\s(.*?)\s*$}) {
2105             for (@{$hint->[1]}) {
2106             $h->{$_} ||= ''; # suppress warning with older perls
2107             $h->{$_} .= "$1\n";
2108             }
2109             }
2110             else { undef $hint }
2111             }
2112              
2113             $hint = [$1, [split /,?\s+/, $2]]
2114             if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
2115              
2116             if ($define) {
2117             if ($define->[1] =~ /\\$/) {
2118             $define->[1] .= $_;
2119             }
2120             else {
2121             if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
2122             my @n = find_api($define->[1]);
2123             push @{$depends{$define->[0]}}, @n if @n
2124             }
2125             undef $define;
2126             }
2127             }
2128              
2129             $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
2130              
2131             if ($function) {
2132             if (/^}/) {
2133             if (exists $API{$function->[0]}) {
2134             my @n = find_api($function->[1]);
2135             push @{$depends{$function->[0]}}, @n if @n
2136             }
2137             undef $function;
2138             }
2139             else {
2140             $function->[1] .= $_;
2141             }
2142             }
2143              
2144             $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
2145              
2146             $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
2147             $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
2148             $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
2149             $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
2150              
2151             if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
2152             my @deps = map { s/\s+//g; $_ } split /,/, $3;
2153             my $d;
2154             for $d (map { s/\s+//g; $_ } split /,/, $1) {
2155             push @{$depends{$d}}, @deps;
2156             }
2157             }
2158              
2159             $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
2160             }
2161              
2162             for (values %depends) {
2163             my %s;
2164             $_ = [sort grep !$s{$_}++, @$_];
2165             }
2166              
2167             if (exists $opt{'api-info'}) {
2168             my $f;
2169             my $count = 0;
2170             my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
2171             for $f (sort { lc $a cmp lc $b } keys %API) {
2172             next unless $f =~ /$match/;
2173             print "\n=== $f ===\n\n";
2174             my $info = 0;
2175             if ($API{$f}{base} || $API{$f}{todo}) {
2176             my $base = format_version($API{$f}{base} || $API{$f}{todo});
2177             print "Supported at least starting from perl-$base.\n";
2178             $info++;
2179             }
2180             if ($API{$f}{provided}) {
2181             my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
2182             print "Support by $ppport provided back to perl-$todo.\n";
2183             print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
2184             print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
2185             print "\n$hints{$f}" if exists $hints{$f};
2186             print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
2187             $info++;
2188             }
2189             print "No portability information available.\n" unless $info;
2190             $count++;
2191             }
2192             $count or print "Found no API matching '$opt{'api-info'}'.";
2193             print "\n";
2194             exit 0;
2195             }
2196              
2197             if (exists $opt{'list-provided'}) {
2198             my $f;
2199             for $f (sort { lc $a cmp lc $b } keys %API) {
2200             next unless $API{$f}{provided};
2201             my @flags;
2202             push @flags, 'explicit' if exists $need{$f};
2203             push @flags, 'depend' if exists $depends{$f};
2204             push @flags, 'hint' if exists $hints{$f};
2205             push @flags, 'warning' if exists $warnings{$f};
2206             my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
2207             print "$f$flags\n";
2208             }
2209             exit 0;
2210             }
2211              
2212             my @files;
2213             my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
2214             my $srcext = join '|', map { quotemeta $_ } @srcext;
2215              
2216             if (@ARGV) {
2217             my %seen;
2218             for (@ARGV) {
2219             if (-e) {
2220             if (-f) {
2221             push @files, $_ unless $seen{$_}++;
2222             }
2223             else { warn "'$_' is not a file.\n" }
2224             }
2225             else {
2226             my @new = grep { -f } glob $_
2227             or warn "'$_' does not exist.\n";
2228             push @files, grep { !$seen{$_}++ } @new;
2229             }
2230             }
2231             }
2232             else {
2233             eval {
2234             require File::Find;
2235             File::Find::find(sub {
2236             $File::Find::name =~ /($srcext)$/i
2237             and push @files, $File::Find::name;
2238             }, '.');
2239             };
2240             if ($@) {
2241             @files = map { glob "*$_" } @srcext;
2242             }
2243             }
2244              
2245             if (!@ARGV || $opt{filter}) {
2246             my(@in, @out);
2247             my %xsc = map { /(.*)\.xs$/ && ("$1.c" => 1) } @files;
2248             #warn "\@files=",@files,"\%xsc=",join ",",keys %xsc;
2249             for (@files) {
2250             if (/^(.*)\.xs$/) { $xsc{"$1.cc"} = 1; }
2251             my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
2252             push @{ $out ? \@out : \@in }, $_;
2253             }
2254             if (@ARGV && @out) {
2255             warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
2256             }
2257             @files = @in;
2258             }
2259              
2260             die "No input files given!\n" unless @files;
2261              
2262             my(%files, %global, %revreplace);
2263             %revreplace = reverse %replace;
2264             my $filename;
2265             my $patch_opened = 0;
2266              
2267             for $filename (@files) {
2268             unless (open IN, "<$filename") {
2269             warn "Unable to read from $filename: $!\n";
2270             next;
2271             }
2272              
2273             info("Scanning $filename ...");
2274              
2275             my $c = do { local $/; };
2276             close IN;
2277              
2278             my %file = (orig => $c, changes => 0);
2279              
2280             # Temporarily remove C/XS comments and strings from the code
2281             my @ccom;
2282              
2283             $c =~ s{
2284             ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
2285             | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
2286             | ( ^$HS*\#[^\r\n]*
2287             | "[^"\\]*(?:\\.[^"\\]*)*"
2288             | '[^'\\]*(?:\\.[^'\\]*)*'
2289             | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
2290             }{ defined $2 and push @ccom, $2;
2291             defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
2292              
2293             $file{ccom} = \@ccom;
2294             $file{code} = $c;
2295             $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
2296              
2297             my $func;
2298              
2299             for $func (keys %API) {
2300             my $match = $func;
2301             $match .= "|$revreplace{$func}" if exists $revreplace{$func};
2302             if ($c =~ /\b(?:Perl_)?($match)\b/) {
2303             $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
2304             $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
2305             if (exists $API{$func}{provided}) {
2306             $file{uses_provided}{$func}++;
2307             if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
2308             $file{uses}{$func}++;
2309             my @deps = rec_depend($func);
2310             if (@deps) {
2311             $file{uses_deps}{$func} = \@deps;
2312             for (@deps) {
2313             $file{uses}{$_} = 0 unless exists $file{uses}{$_};
2314             }
2315             }
2316             for ($func, @deps) {
2317             $file{needs}{$_} = 'static' if exists $need{$_};
2318             }
2319             }
2320             }
2321             if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
2322             if ($c =~ /\b$func\b/) {
2323             $file{uses_todo}{$func}++;
2324             }
2325             }
2326             }
2327             }
2328              
2329             while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
2330             if (exists $need{$2}) {
2331             $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
2332             }
2333             else { warning("Possibly wrong #define $1 in $filename") }
2334             }
2335              
2336             for (qw(uses needs uses_todo needed_global needed_static)) {
2337             for $func (keys %{$file{$_}}) {
2338             push @{$global{$_}{$func}}, $filename;
2339             }
2340             }
2341              
2342             $files{$filename} = \%file;
2343             }
2344              
2345             # Globally resolve NEED_'s
2346             my $need;
2347             for $need (keys %{$global{needs}}) {
2348             if (@{$global{needs}{$need}} > 1) {
2349             my @targets = @{$global{needs}{$need}};
2350             my @t = grep $files{$_}{needed_global}{$need}, @targets;
2351             @targets = @t if @t;
2352             @t = grep /\.xs$/i, @targets;
2353             @targets = @t if @t;
2354             my $target = shift @targets;
2355             $files{$target}{needs}{$need} = 'global';
2356             for (@{$global{needs}{$need}}) {
2357             $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
2358             }
2359             }
2360             }
2361              
2362             for $filename (@files) {
2363             exists $files{$filename} or next;
2364              
2365             info("=== Analyzing $filename ===");
2366              
2367             my %file = %{$files{$filename}};
2368             my $func;
2369             my $c = $file{code};
2370             my $warnings = 0;
2371              
2372             for $func (sort keys %{$file{uses_Perl}}) {
2373             if ($API{$func}{varargs}) {
2374             unless ($API{$func}{nothxarg}) {
2375             my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
2376             { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
2377             if ($changes) {
2378             warning("Doesn't pass interpreter argument aTHX to Perl_$func");
2379             $file{changes} += $changes;
2380             }
2381             }
2382             }
2383             else {
2384             warning("Uses Perl_$func instead of $func");
2385             $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
2386             {$func$1(}g);
2387             }
2388             }
2389              
2390             for $func (sort keys %{$file{uses_replace}}) {
2391             warning("Uses $func instead of $replace{$func}");
2392             $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
2393             }
2394              
2395             for $func (sort keys %{$file{uses_provided}}) {
2396             if ($file{uses}{$func}) {
2397             if (exists $file{uses_deps}{$func}) {
2398             diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
2399             }
2400             else {
2401             diag("Uses $func");
2402             }
2403             }
2404             $warnings += hint($func);
2405             }
2406              
2407             unless ($opt{quiet}) {
2408             for $func (sort keys %{$file{uses_todo}}) {
2409             print "*** WARNING: Uses $func, which may not be portable below perl ",
2410             format_version($API{$func}{todo}), ", even with '$ppport'\n";
2411             $warnings++;
2412             }
2413             }
2414              
2415             for $func (sort keys %{$file{needed_static}}) {
2416             my $message = '';
2417             if (not exists $file{uses}{$func}) {
2418             $message = "No need to define NEED_$func if $func is never used";
2419             }
2420             elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
2421             $message = "No need to define NEED_$func when already needed globally";
2422             }
2423             if ($message) {
2424             diag($message);
2425             $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
2426             }
2427             }
2428              
2429             for $func (sort keys %{$file{needed_global}}) {
2430             my $message = '';
2431             if (not exists $global{uses}{$func}) {
2432             $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
2433             }
2434             elsif (exists $file{needs}{$func}) {
2435             if ($file{needs}{$func} eq 'extern') {
2436             $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
2437             }
2438             elsif ($file{needs}{$func} eq 'static') {
2439             $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
2440             }
2441             }
2442             if ($message) {
2443             diag($message);
2444             $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
2445             }
2446             }
2447              
2448             $file{needs_inc_ppport} = keys %{$file{uses}};
2449              
2450             if ($file{needs_inc_ppport}) {
2451             my $pp = '';
2452              
2453             for $func (sort keys %{$file{needs}}) {
2454             my $type = $file{needs}{$func};
2455             next if $type eq 'extern';
2456             my $suffix = $type eq 'global' ? '_GLOBAL' : '';
2457             unless (exists $file{"needed_$type"}{$func}) {
2458             if ($type eq 'global') {
2459             diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
2460             }
2461             else {
2462             diag("File needs $func, adding static request");
2463             }
2464             $pp .= "#define NEED_$func$suffix\n";
2465             }
2466             }
2467              
2468             if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
2469             $pp = '';
2470             $file{changes}++;
2471             }
2472              
2473             unless ($file{has_inc_ppport}) {
2474             diag("Needs to include '$ppport'");
2475             $pp .= qq(#include "$ppport"\n)
2476             }
2477              
2478             if ($pp) {
2479             $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
2480             || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
2481             || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
2482             || ($c =~ s/^/$pp/);
2483             }
2484             }
2485             else {
2486             if ($file{has_inc_ppport}) {
2487             diag("No need to include '$ppport'");
2488             $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
2489             }
2490             }
2491              
2492             # put back in our C comments
2493             my $ix;
2494             my $cppc = 0;
2495             my @ccom = @{$file{ccom}};
2496             for $ix (0 .. $#ccom) {
2497             if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
2498             $cppc++;
2499             $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
2500             }
2501             else {
2502             $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
2503             }
2504             }
2505              
2506             if ($cppc) {
2507             my $s = $cppc != 1 ? 's' : '';
2508             warning("Uses $cppc C++ style comment$s, which is not portable");
2509             }
2510              
2511             my $s = $warnings != 1 ? 's' : '';
2512             my $warn = $warnings ? " ($warnings warning$s)" : '';
2513             info("Analysis completed$warn");
2514              
2515             if ($file{changes}) {
2516             if (exists $opt{copy}) {
2517             my $newfile = "$filename$opt{copy}";
2518             if (-e $newfile) {
2519             error("'$newfile' already exists, refusing to write copy of '$filename'");
2520             }
2521             else {
2522             local *F;
2523             if (open F, ">$newfile") {
2524             info("Writing copy of '$filename' with changes to '$newfile'");
2525             print F $c;
2526             close F;
2527             }
2528             else {
2529             error("Cannot open '$newfile' for writing: $!");
2530             }
2531             }
2532             }
2533             elsif (exists $opt{patch} || $opt{changes}) {
2534             if (exists $opt{patch}) {
2535             unless ($patch_opened) {
2536             if (open PATCH, ">$opt{patch}") {
2537             $patch_opened = 1;
2538             }
2539             else {
2540             error("Cannot open '$opt{patch}' for writing: $!");
2541             delete $opt{patch};
2542             $opt{changes} = 1;
2543             goto fallback;
2544             }
2545             }
2546             mydiff(\*PATCH, $filename, $c);
2547             }
2548             else {
2549             fallback:
2550             info("Suggested changes:");
2551             mydiff(\*STDOUT, $filename, $c);
2552             }
2553             }
2554             else {
2555             my $s = $file{changes} == 1 ? '' : 's';
2556             info("$file{changes} potentially required change$s detected");
2557             }
2558             }
2559             else {
2560             info("Looks good");
2561             }
2562             }
2563              
2564             close PATCH if $patch_opened;
2565              
2566             exit 0;
2567              
2568              
2569             sub try_use { eval "use @_;"; return $@ eq '' }
2570              
2571             sub mydiff
2572             {
2573             local *F = shift;
2574             my($file, $str) = @_;
2575             my $diff;
2576              
2577             if (exists $opt{diff}) {
2578             $diff = run_diff($opt{diff}, $file, $str);
2579             }
2580              
2581             if (!defined $diff and try_use('Text::Diff')) {
2582             $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
2583             $diff = <
2584             --- $file
2585             +++ $file.patched
2586             HEADER
2587             }
2588              
2589             if (!defined $diff) {
2590             $diff = run_diff('diff -u', $file, $str);
2591             }
2592              
2593             if (!defined $diff) {
2594             $diff = run_diff('diff', $file, $str);
2595             }
2596              
2597             if (!defined $diff) {
2598             error("Cannot generate a diff. Please install Text::Diff or use --copy.");
2599             return;
2600             }
2601              
2602             print F $diff;
2603             }
2604              
2605             sub run_diff
2606             {
2607             my($prog, $file, $str) = @_;
2608             my $tmp = 'dppptemp';
2609             my $suf = 'aaa';
2610             my $diff = '';
2611             local *F;
2612              
2613             while (-e "$tmp.$suf") { $suf++ }
2614             $tmp = "$tmp.$suf";
2615              
2616             if (open F, ">$tmp") {
2617             print F $str;
2618             close F;
2619              
2620             if (open F, "$prog $file $tmp |") {
2621             while () {
2622             s/\Q$tmp\E/$file.patched/;
2623             $diff .= $_;
2624             }
2625             close F;
2626             unlink $tmp;
2627             return $diff;
2628             }
2629              
2630             unlink $tmp;
2631             }
2632             else {
2633             error("Cannot open '$tmp' for writing: $!");
2634             }
2635              
2636             return undef;
2637             }
2638              
2639             sub rec_depend
2640             {
2641             my($func, $seen) = @_;
2642             return () unless exists $depends{$func};
2643             $seen = {%{$seen||{}}};
2644             return () if $seen->{$func}++;
2645             my %s;
2646             grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
2647             }
2648              
2649             sub parse_version
2650             {
2651             my $ver = shift;
2652              
2653             if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
2654             return ($1, $2, $3);
2655             }
2656             elsif ($ver !~ /^\d+\.[\d_]+$/) {
2657             die "cannot parse version '$ver'\n";
2658             }
2659              
2660             $ver =~ s/_//g;
2661             $ver =~ s/$/000000/;
2662              
2663             my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
2664              
2665             $v = int $v;
2666             $s = int $s;
2667              
2668             if ($r < 5 || ($r == 5 && $v < 6)) {
2669             if ($s % 10) {
2670             die "cannot parse version '$ver'\n";
2671             }
2672             }
2673              
2674             return ($r, $v, $s);
2675             }
2676              
2677             sub format_version
2678             {
2679             my $ver = shift;
2680              
2681             $ver =~ s/$/000000/;
2682             my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
2683              
2684             $v = int $v;
2685             $s = int $s;
2686              
2687             if ($r < 5 || ($r == 5 && $v < 6)) {
2688             if ($s % 10) {
2689             die "invalid version '$ver'\n";
2690             }
2691             $s /= 10;
2692              
2693             $ver = sprintf "%d.%03d", $r, $v;
2694             $s > 0 and $ver .= sprintf "_%02d", $s;
2695              
2696             return $ver;
2697             }
2698              
2699             return sprintf "%d.%d.%d", $r, $v, $s;
2700             }
2701              
2702             sub info
2703             {
2704             $opt{quiet} and return;
2705             print @_, "\n";
2706             }
2707              
2708             sub diag
2709             {
2710             $opt{quiet} and return;
2711             $opt{diag} and print @_, "\n";
2712             }
2713              
2714             sub warning
2715             {
2716             $opt{quiet} and return;
2717             print "*** ", @_, "\n";
2718             }
2719              
2720             sub error
2721             {
2722             print "*** ERROR: ", @_, "\n";
2723             }
2724              
2725             my %given_hints;
2726             my %given_warnings;
2727             sub hint
2728             {
2729             $opt{quiet} and return;
2730             my $func = shift;
2731             my $rv = 0;
2732             if (exists $warnings{$func} && !$given_warnings{$func}++) {
2733             my $warn = $warnings{$func};
2734             $warn =~ s!^!*** !mg;
2735             print "*** WARNING: $func\n", $warn;
2736             $rv++;
2737             }
2738             if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
2739             my $hint = $hints{$func};
2740             $hint =~ s/^/ /mg;
2741             print " --- hint for $func ---\n", $hint;
2742             }
2743             $rv;
2744             }
2745              
2746             sub usage
2747             {
2748             my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
2749             my %M = ( 'I' => '*' );
2750             $usage =~ s/^\s*perl\s+\S+/$^X $0/;
2751             $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
2752              
2753             print <
2754              
2755             Usage: $usage
2756              
2757             See perldoc $0 for details.
2758              
2759             ENDUSAGE
2760              
2761             exit 2;
2762             }
2763              
2764             sub strip
2765             {
2766             my $self = do { local(@ARGV,$/)=($0); <> };
2767             my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
2768             $copy =~ s/^(?=\S+)/ /gms;
2769             $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
2770             $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
2771             if (\@ARGV && \$ARGV[0] eq '--unstrip') {
2772             eval { require Devel::PPPort };
2773             \$@ and die "Cannot require Devel::PPPort, please install.\\n";
2774             if (eval \$Devel::PPPort::VERSION < $VERSION) {
2775             die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
2776             . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
2777             . "Please install a newer version, or --unstrip will not work.\\n";
2778             }
2779             Devel::PPPort::WriteFile(\$0);
2780             exit 0;
2781             }
2782             print <
2783              
2784             Sorry, but this is a stripped version of \$0.
2785              
2786             To be able to use its original script and doc functionality,
2787             please try to regenerate this file using:
2788              
2789             \$^X \$0 --unstrip
2790              
2791             END
2792             /ms;
2793             my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
2794             $c =~ s{
2795             / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
2796             | ( "[^"\\]*(?:\\.[^"\\]*)*"
2797             | '[^'\\]*(?:\\.[^'\\]*)*' )
2798             | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
2799             $c =~ s!\s+$!!mg;
2800             $c =~ s!^$LF!!mg;
2801             $c =~ s!^\s*#\s*!#!mg;
2802             $c =~ s!^\s+!!mg;
2803              
2804             open OUT, ">$0" or die "cannot strip $0: $!\n";
2805             print OUT "$pl$c\n";
2806              
2807             exit 0;
2808             }
2809              
2810             __DATA__