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.53_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.53_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.53_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||p
520             HvENAMEUTF8|5.015004||p
521             HvENAME|5.013007||p
522             HvNAMELEN_get|5.009003||p
523             HvNAMELEN|5.015004||p
524             HvNAMEUTF8|5.015004||p
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_class|||p
700             PL_in_my_stash|5.024000||p
701             PL_in_my|5.024000||p
702             PL_in_pod|||p
703             PL_in_sub|||p
704             PL_keyword_plugin||5.011002|
705             PL_laststatval|5.005000||p
706             PL_lex_state|5.024000||p
707             PL_lex_stuff|5.024000||p
708             PL_linestr|5.024000||p
709             PL_modglobal||5.005000|n
710             PL_na|5.004050||pn
711             PL_no_modify|5.006000||p
712             PL_opfreehook||5.011000|n
713             PL_parser|5.009005||p
714             PL_peepp||5.007003|n
715             PL_perl_destruct_level|5.004050||p
716             PL_perldb|5.004050||p
717             PL_ppaddr|5.006000||p
718             PL_rpeepp||5.013005|n
719             PL_rsfp_filters|5.024000||p
720             PL_rsfp|5.024000||p
721             PL_signals|5.008001||p
722             PL_stack_base|5.004050||p
723             PL_stack_sp|5.004050||p
724             PL_statcache|5.005000||p
725             PL_stdingv|5.004050||p
726             PL_sv_arenaroot|5.004050||p
727             PL_sv_no|5.004050||pn
728             PL_sv_undef|5.004050||pn
729             PL_sv_yes|5.004050||pn
730             PL_sv_zero|||n
731             PL_tainted|5.004050||p
732             PL_tainting|5.004050||p
733             PL_tokenbuf|5.024000||p
734             POP_MULTICALL||5.024000|
735             POPi|||n
736             POPl|||n
737             POPn|||n
738             POPpbytex||5.007001|n
739             POPpx||5.005030|n
740             POPp|||n
741             POPs|||n
742             POPul||5.006000|n
743             POPu||5.004000|n
744             PTR2IV|5.006000||p
745             PTR2NV|5.006000||p
746             PTR2UV|5.006000||p
747             PTR2nat|5.009003||p
748             PTR2ul|5.007001||p
749             PTRV|5.006000||p
750             PUSHMARK|||
751             PUSH_MULTICALL||5.024000|
752             PUSHi|||
753             PUSHmortal|5.009002||p
754             PUSHn|||
755             PUSHp|||
756             PUSHs|||
757             PUSHu|5.004000||p
758             PUTBACK|||
759             PadARRAY||5.024000|
760             PadMAX||5.024000|
761             PadlistARRAY||5.024000|
762             PadlistMAX||5.024000|
763             PadlistNAMESARRAY||5.024000|
764             PadlistNAMESMAX||5.024000|
765             PadlistNAMES||5.024000|
766             PadlistREFCNT||5.017004|
767             PadnameLEN||5.024000|
768             PadnamePV||5.024000|
769             PadnameREFCNT_dec||5.024000|
770             PadnameREFCNT||5.024000|
771             PadnameSV||5.024000|
772             PadnameUTF8||5.021007|
773             PadnamelistARRAY||5.024000|
774             PadnamelistMAX||5.024000|
775             PadnamelistREFCNT_dec||5.024000|
776             PadnamelistREFCNT||5.024000|
777             PerlIO_clearerr||5.007003|
778             PerlIO_close||5.007003|
779             PerlIO_context_layers||5.009004|
780             PerlIO_eof||5.007003|
781             PerlIO_error||5.007003|
782             PerlIO_fileno||5.007003|
783             PerlIO_fill||5.007003|
784             PerlIO_flush||5.007003|
785             PerlIO_get_base||5.007003|
786             PerlIO_get_bufsiz||5.007003|
787             PerlIO_get_cnt||5.007003|
788             PerlIO_get_ptr||5.007003|
789             PerlIO_read||5.007003|
790             PerlIO_seek||5.007003|
791             PerlIO_set_cnt||5.007003|
792             PerlIO_set_ptrcnt||5.007003|
793             PerlIO_setlinebuf||5.007003|
794             PerlIO_stderr||5.007003|
795             PerlIO_stdin||5.007003|
796             PerlIO_stdout||5.007003|
797             PerlIO_tell||5.007003|
798             PerlIO_unread||5.007003|
799             PerlIO_write||5.007003|
800             Perl_langinfo|||n
801             Perl_setlocale|||n
802             PoisonFree|5.009004||p
803             PoisonNew|5.009004||p
804             PoisonWith|5.009004||p
805             Poison|5.008000||p
806             READ_XDIGIT||5.017006|
807             REPLACEMENT_CHARACTER_UTF8|||
808             RESTORE_LC_NUMERIC||5.024000|
809             RETVAL|||n
810             Renewc|||
811             Renew|||
812             SAVETMPS|||
813             SAVE_DEFSV|5.004050||p
814             SPAGAIN|||
815             SP|||
816             START_EXTERN_C|5.005000||p
817             START_MY_CXT|5.007003||p
818             STMT_END|||p
819             STMT_START|||p
820             STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000|
821             STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000|
822             STR_WITH_LEN|5.009003||p
823             ST|||
824             SV_CONST_RETURN|5.009003||p
825             SV_COW_DROP_PV|5.008001||p
826             SV_COW_SHARED_HASH_KEYS|5.009005||p
827             SV_GMAGIC|5.007002||p
828             SV_HAS_TRAILING_NUL|5.009004||p
829             SV_IMMEDIATE_UNREF|5.007001||p
830             SV_MUTABLE_RETURN|5.009003||p
831             SV_NOSTEAL|5.009002||p
832             SV_SMAGIC|5.009003||p
833             SV_UTF8_NO_ENCODING|5.008001||p
834             SVfARG|5.009005||p
835             SVf_UTF8|5.006000||p
836             SVf|5.006000||p
837             SVt_INVLIST||5.019002|
838             SVt_IV|||
839             SVt_NULL|||
840             SVt_NV|||
841             SVt_PVAV|||
842             SVt_PVCV|||
843             SVt_PVFM|||
844             SVt_PVGV|||
845             SVt_PVHV|||
846             SVt_PVIO|||
847             SVt_PVIV|||
848             SVt_PVLV|||
849             SVt_PVMG|||
850             SVt_PVNV|||
851             SVt_PV|||
852             SVt_REGEXP||5.011000|
853             Safefree|||
854             StructCopy|||
855             SvCUR_set|||
856             SvCUR|||
857             SvEND|||
858             SvGAMAGIC||5.006001|
859             SvGETMAGIC|5.004050||p
860             SvGROW|||
861             SvIOK_UV||5.006000|
862             SvIOK_notUV||5.006000|
863             SvIOK_off|||
864             SvIOK_only_UV||5.006000|
865             SvIOK_only|||
866             SvIOK_on|||
867             SvIOKp|||
868             SvIOK|||
869             SvIVX|||
870             SvIV_nomg|5.009001||p
871             SvIV_set|||
872             SvIVx|||
873             SvIV|||
874             SvIsCOW_shared_hash||5.008003|
875             SvIsCOW||5.008003|
876             SvLEN_set|||
877             SvLEN|||
878             SvLOCK||5.007003|
879             SvMAGIC_set|5.009003||p
880             SvNIOK_off|||
881             SvNIOKp|||
882             SvNIOK|||
883             SvNOK_off|||
884             SvNOK_only|||
885             SvNOK_on|||
886             SvNOKp|||
887             SvNOK|||
888             SvNVX|||
889             SvNV_nomg||5.013002|
890             SvNV_set|||
891             SvNVx|||
892             SvNV|||
893             SvOK|||
894             SvOOK_offset||5.011000|
895             SvOOK|||
896             SvPOK_off|||
897             SvPOK_only_UTF8||5.006000|
898             SvPOK_only|||
899             SvPOK_on|||
900             SvPOKp|||
901             SvPOK|||
902             SvPVCLEAR|||
903             SvPVX_const|5.009003||p
904             SvPVX_mutable|5.009003||p
905             SvPVX|||
906             SvPV_const|5.009003||p
907             SvPV_flags_const_nolen|5.009003||p
908             SvPV_flags_const|5.009003||p
909             SvPV_flags_mutable|5.009003||p
910             SvPV_flags|5.007002||p
911             SvPV_force_flags_mutable|5.009003||p
912             SvPV_force_flags_nolen|5.009003||p
913             SvPV_force_flags|5.007002||p
914             SvPV_force_mutable|5.009003||p
915             SvPV_force_nolen|5.009003||p
916             SvPV_force_nomg_nolen|5.009003||p
917             SvPV_force_nomg|5.007002||p
918             SvPV_force|||p
919             SvPV_mutable|5.009003||p
920             SvPV_nolen_const|5.009003||p
921             SvPV_nolen|5.006000||p
922             SvPV_nomg_const_nolen|5.009003||p
923             SvPV_nomg_const|5.009003||p
924             SvPV_nomg_nolen|5.013007||p
925             SvPV_nomg|5.007002||p
926             SvPV_renew|5.009003||p
927             SvPV_set|||
928             SvPVbyte_force||5.009002|
929             SvPVbyte_nolen||5.006000|
930             SvPVbytex_force||5.006000|
931             SvPVbytex||5.006000|
932             SvPVbyte|5.006000||p
933             SvPVutf8_force||5.006000|
934             SvPVutf8_nolen||5.006000|
935             SvPVutf8x_force||5.006000|
936             SvPVutf8x||5.006000|
937             SvPVutf8||5.006000|
938             SvPVx|||
939             SvPV|||
940             SvREADONLY_off|||
941             SvREADONLY_on|||
942             SvREADONLY|||
943             SvREFCNT_dec_NN||5.017007|
944             SvREFCNT_dec|||
945             SvREFCNT_inc_NN|5.009004||p
946             SvREFCNT_inc_simple_NN|5.009004||p
947             SvREFCNT_inc_simple_void_NN|5.009004||p
948             SvREFCNT_inc_simple_void|5.009004||p
949             SvREFCNT_inc_simple|5.009004||p
950             SvREFCNT_inc_void_NN|5.009004||p
951             SvREFCNT_inc_void|5.009004||p
952             SvREFCNT_inc|||p
953             SvREFCNT|||
954             SvROK_off|||
955             SvROK_on|||
956             SvROK|||
957             SvRV_set|5.009003||p
958             SvRV|||
959             SvRXOK|5.009005||p
960             SvRX|5.009005||p
961             SvSETMAGIC|||
962             SvSHARED_HASH|5.009003||p
963             SvSHARE||5.007003|
964             SvSTASH_set|5.009003||p
965             SvSTASH|||
966             SvSetMagicSV_nosteal||5.004000|
967             SvSetMagicSV||5.004000|
968             SvSetSV_nosteal||5.004000|
969             SvSetSV|||
970             SvTAINTED_off||5.004000|
971             SvTAINTED_on||5.004000|
972             SvTAINTED||5.004000|
973             SvTAINT|||
974             SvTRUE_nomg||5.013006|
975             SvTRUE|||
976             SvTYPE|||
977             SvUNLOCK||5.007003|
978             SvUOK|5.007001|5.006000|p
979             SvUPGRADE|||
980             SvUTF8_off||5.006000|
981             SvUTF8_on||5.006000|
982             SvUTF8||5.006000|
983             SvUVXx|5.004000||p
984             SvUVX|5.004000||p
985             SvUV_nomg|5.009001||p
986             SvUV_set|5.009003||p
987             SvUVx|5.004000||p
988             SvUV|5.004000||p
989             SvVOK||5.008001|
990             SvVSTRING_mg|5.009004||p
991             THIS|||n
992             UNDERBAR|5.009002||p
993             UNICODE_REPLACEMENT|||p
994             UNLIKELY|||p
995             UTF8SKIP||5.006000|
996             UTF8_ALLOW_ANYUV|||p
997             UTF8_ALLOW_ANY|||p
998             UTF8_ALLOW_CONTINUATION|||p
999             UTF8_ALLOW_EMPTY|||p
1000             UTF8_ALLOW_LONG|||p
1001             UTF8_ALLOW_NON_CONTINUATION|||p
1002             UTF8_ALLOW_OVERFLOW|||p
1003             UTF8_ALLOW_SHORT|||p
1004             UTF8_IS_INVARIANT|||
1005             UTF8_IS_NONCHAR|||
1006             UTF8_IS_SUPER|||
1007             UTF8_IS_SURROGATE|||
1008             UTF8_MAXBYTES|5.009002||p
1009             UTF8_SAFE_SKIP|||p
1010             UVCHR_IS_INVARIANT|||
1011             UVCHR_SKIP||5.022000|
1012             UVSIZE|5.006000||p
1013             UVTYPE|5.006000||p
1014             UVXf|5.007001||p
1015             UVof|5.006000||p
1016             UVuf|5.006000||p
1017             UVxf|5.006000||p
1018             WARN_ALL|5.006000||p
1019             WARN_AMBIGUOUS|5.006000||p
1020             WARN_ASSERTIONS|5.024000||p
1021             WARN_BAREWORD|5.006000||p
1022             WARN_CLOSED|5.006000||p
1023             WARN_CLOSURE|5.006000||p
1024             WARN_DEBUGGING|5.006000||p
1025             WARN_DEPRECATED|5.006000||p
1026             WARN_DIGIT|5.006000||p
1027             WARN_EXEC|5.006000||p
1028             WARN_EXITING|5.006000||p
1029             WARN_GLOB|5.006000||p
1030             WARN_INPLACE|5.006000||p
1031             WARN_INTERNAL|5.006000||p
1032             WARN_IO|5.006000||p
1033             WARN_LAYER|5.008000||p
1034             WARN_MALLOC|5.006000||p
1035             WARN_MISC|5.006000||p
1036             WARN_NEWLINE|5.006000||p
1037             WARN_NUMERIC|5.006000||p
1038             WARN_ONCE|5.006000||p
1039             WARN_OVERFLOW|5.006000||p
1040             WARN_PACK|5.006000||p
1041             WARN_PARENTHESIS|5.006000||p
1042             WARN_PIPE|5.006000||p
1043             WARN_PORTABLE|5.006000||p
1044             WARN_PRECEDENCE|5.006000||p
1045             WARN_PRINTF|5.006000||p
1046             WARN_PROTOTYPE|5.006000||p
1047             WARN_QW|5.006000||p
1048             WARN_RECURSION|5.006000||p
1049             WARN_REDEFINE|5.006000||p
1050             WARN_REGEXP|5.006000||p
1051             WARN_RESERVED|5.006000||p
1052             WARN_SEMICOLON|5.006000||p
1053             WARN_SEVERE|5.006000||p
1054             WARN_SIGNAL|5.006000||p
1055             WARN_SUBSTR|5.006000||p
1056             WARN_SYNTAX|5.006000||p
1057             WARN_TAINT|5.006000||p
1058             WARN_THREADS|5.008000||p
1059             WARN_UNINITIALIZED|5.006000||p
1060             WARN_UNOPENED|5.006000||p
1061             WARN_UNPACK|5.006000||p
1062             WARN_UNTIE|5.006000||p
1063             WARN_UTF8|5.006000||p
1064             WARN_VOID|5.006000||p
1065             WIDEST_UTYPE|5.015004||p
1066             XCPT_CATCH|5.009002||p
1067             XCPT_RETHROW|5.009002||p
1068             XCPT_TRY_END|5.009002||p
1069             XCPT_TRY_START|5.009002||p
1070             XPUSHi|||
1071             XPUSHmortal|5.009002||p
1072             XPUSHn|||
1073             XPUSHp|||
1074             XPUSHs|||
1075             XPUSHu|5.004000||p
1076             XSPROTO|5.010000||p
1077             XSRETURN_EMPTY|||
1078             XSRETURN_IV|||
1079             XSRETURN_NO|||
1080             XSRETURN_NV|||
1081             XSRETURN_PV|||
1082             XSRETURN_UNDEF|||
1083             XSRETURN_UV|5.008001||p
1084             XSRETURN_YES|||
1085             XSRETURN|||p
1086             XST_mIV|||
1087             XST_mNO|||
1088             XST_mNV|||
1089             XST_mPV|||
1090             XST_mUNDEF|||
1091             XST_mUV|5.008001||p
1092             XST_mYES|||
1093             XS_APIVERSION_BOOTCHECK||5.024000|
1094             XS_EXTERNAL||5.024000|
1095             XS_INTERNAL||5.024000|
1096             XS_VERSION_BOOTCHECK||5.024000|
1097             XS_VERSION|||
1098             XSprePUSH|5.006000||p
1099             XS|||
1100             XopDISABLE||5.024000|
1101             XopENABLE||5.024000|
1102             XopENTRYCUSTOM||5.024000|
1103             XopENTRY_set||5.024000|
1104             XopENTRY||5.024000|
1105             XopFLAGS||5.013007|
1106             ZeroD|5.009002||p
1107             Zero|||
1108             __ASSERT_|||p
1109             _aMY_CXT|5.007003||p
1110             _pMY_CXT|5.007003||p
1111             _variant_byte_number|||n
1112             aMY_CXT_|5.007003||p
1113             aMY_CXT|5.007003||p
1114             aTHXR_|5.024000||p
1115             aTHXR|5.024000||p
1116             aTHX_|5.006000||p
1117             aTHX|5.006000||p
1118             amagic_call|||
1119             amagic_deref_call||5.013007|
1120             any_dup|||
1121             atfork_lock||5.007003|n
1122             atfork_unlock||5.007003|n
1123             av_arylen_p||5.009003|
1124             av_clear|||
1125             av_delete||5.006000|
1126             av_exists||5.006000|
1127             av_extend|||
1128             av_fetch|||
1129             av_fill|||
1130             av_iter_p||5.011000|
1131             av_len|||
1132             av_make|||
1133             av_pop|||
1134             av_push|||
1135             av_shift|||
1136             av_store|||
1137             av_tindex|5.017009||p
1138             av_top_index|5.017009||p
1139             av_undef|||
1140             av_unshift|||
1141             ax|||n
1142             block_end||5.004000|
1143             block_gimme||5.004000|
1144             block_start||5.004000|
1145             blockhook_register||5.013003|
1146             boolSV|5.004000||p
1147             bytes_cmp_utf8||5.013007|
1148             cBOOL|5.013000||p
1149             call_argv|5.006000||p
1150             call_atexit||5.006000|
1151             call_list||5.004000|
1152             call_method|5.006000||p
1153             call_pv|5.006000||p
1154             call_sv|5.006000||p
1155             caller_cx|5.013005|5.006000|p
1156             calloc||5.007002|n
1157             cast_i32||5.006000|n
1158             cast_iv||5.006000|n
1159             cast_ulong||5.006000|n
1160             cast_uv||5.006000|n
1161             ckWARN2_d|||
1162             ckWARN2|||
1163             ckWARN3_d|||
1164             ckWARN3|||
1165             ckWARN4_d|||
1166             ckWARN4|||
1167             ckWARN_d|||
1168             ckWARN|5.006000||p
1169             ck_entersub_args_list||5.013006|
1170             ck_entersub_args_proto_or_list||5.013006|
1171             ck_entersub_args_proto||5.013006|
1172             ck_warner_d||5.011001|v
1173             ck_warner||5.011001|v
1174             ckwarn_d||5.009003|
1175             ckwarn||5.009003|
1176             clear_defarray||5.023008|
1177             clone_params_del|||n
1178             clone_params_new|||n
1179             cop_hints_2hv||5.013007|
1180             cop_hints_fetch_pvn||5.013007|
1181             cop_hints_fetch_pvs||5.013007|
1182             cop_hints_fetch_pv||5.013007|
1183             cop_hints_fetch_sv||5.013007|
1184             cophh_2hv||5.013007|
1185             cophh_copy||5.013007|
1186             cophh_delete_pvn||5.013007|
1187             cophh_delete_pvs||5.013007|
1188             cophh_delete_pv||5.013007|
1189             cophh_delete_sv||5.013007|
1190             cophh_fetch_pvn||5.013007|
1191             cophh_fetch_pvs||5.013007|
1192             cophh_fetch_pv||5.013007|
1193             cophh_fetch_sv||5.013007|
1194             cophh_free||5.013007|
1195             cophh_new_empty||5.024000|
1196             cophh_store_pvn||5.013007|
1197             cophh_store_pvs||5.013007|
1198             cophh_store_pv||5.013007|
1199             cophh_store_sv||5.013007|
1200             croak_memory_wrap|5.019003||pn
1201             croak_no_modify_sv|||p
1202             croak_no_modify|5.013003||pn
1203             croak_nocontext|||pvn
1204             croak_sv|5.013001||p
1205             croak_xs_usage|5.010001||pn
1206             croak|||v
1207             csighandler||5.009003|n
1208             custom_op_desc||5.007003|
1209             custom_op_name||5.007003|
1210             custom_op_register||5.013007|
1211             custom_op_xop||5.013007|
1212             cv_clone|||
1213             cv_const_sv||5.003070|n
1214             cv_get_call_checker_flags|||
1215             cv_get_call_checker||5.013006|
1216             cv_name||5.021005|
1217             cv_set_call_checker_flags||5.021004|
1218             cv_set_call_checker||5.013006|
1219             cv_undef|||
1220             cx_dump||5.005000|
1221             cx_dup|||
1222             cxinc|||
1223             dAXMARK|5.009003||p
1224             dAX|5.007002||p
1225             dITEMS|5.007002||p
1226             dMARK|||
1227             dMULTICALL||5.009003|
1228             dMY_CXT_SV|5.007003||p
1229             dMY_CXT|5.007003||p
1230             dNOOP|5.006000||p
1231             dORIGMARK|||
1232             dSP|||
1233             dTHR|5.004050||p
1234             dTHXR|5.024000||p
1235             dTHXa|5.006000||p
1236             dTHXoa|5.006000||p
1237             dTHX|5.006000||p
1238             dUNDERBAR|5.009002||p
1239             dVAR|5.009003||p
1240             dXCPT|5.009002||p
1241             dXSARGS|||
1242             dXSI32|||
1243             dXSTARG|5.006000||p
1244             deb_nocontext|||vn
1245             debop||5.005000|
1246             debprofdump||5.005000|
1247             debstackptrs||5.007003|
1248             debstack||5.007003|
1249             deb||5.007003|v
1250             delimcpy||5.004000|n
1251             despatch_signals||5.007001|
1252             die_nocontext|||vn
1253             die_sv|5.013001||p
1254             die|||v
1255             dirp_dup|||
1256             do_aspawn|||
1257             do_binmode||5.004050|
1258             do_close|||
1259             do_gv_dump||5.006000|
1260             do_gvgv_dump||5.006000|
1261             do_hv_dump||5.006000|
1262             do_join|||
1263             do_magic_dump||5.006000|
1264             do_op_dump||5.006000|
1265             do_open9||5.006000|
1266             do_openn||5.007001|
1267             do_open||5.003070|
1268             do_pmop_dump||5.006000|
1269             do_spawn_nowait|||
1270             do_spawn|||
1271             do_sprintf|||
1272             do_sv_dump||5.006000|
1273             doing_taint||5.008001|n
1274             doref||5.009003|
1275             dounwind|||
1276             dowantarray|||
1277             dump_all||5.006000|
1278             dump_c_backtrace|||
1279             dump_eval||5.006000|
1280             dump_form||5.006000|
1281             dump_indent||5.006000|v
1282             dump_mstats|||
1283             dump_packsubs||5.006000|
1284             dump_sub||5.006000|
1285             dump_vindent||5.006000|
1286             eval_pv|5.006000||p
1287             eval_sv|5.006000||p
1288             fbm_compile||5.005000|
1289             fbm_instr||5.005000|
1290             filter_add|||
1291             filter_del|||
1292             filter_read|||
1293             find_runcv||5.008001|
1294             find_rundefsvoffset||5.009002|
1295             find_rundefsv||5.013002|
1296             foldEQ_latin1||5.013008|n
1297             foldEQ_locale||5.013002|n
1298             foldEQ_utf8||5.013002|
1299             foldEQ||5.013002|n
1300             form_nocontext|||vn
1301             form||5.004000|v
1302             fp_dup|||
1303             fprintf_nocontext|||vn
1304             free_global_struct|||
1305             free_tmps|||
1306             get_av|5.006000||p
1307             get_c_backtrace_dump|||
1308             get_context||5.006000|n
1309             get_cvn_flags|5.009005||p
1310             get_cvs|5.011000||p
1311             get_cv|5.006000||p
1312             get_hv|5.006000||p
1313             get_mstats|||
1314             get_op_descs||5.005000|
1315             get_op_names||5.005000|
1316             get_ppaddr||5.006000|
1317             get_sv|5.006000||p
1318             get_vtbl||5.005030|
1319             getcwd_sv||5.007002|
1320             gp_dup|||
1321             gp_free|||
1322             gp_ref|||
1323             grok_bin|5.007003||p
1324             grok_hex|5.007003||p
1325             grok_infnan||5.021004|
1326             grok_number_flags||5.021002|
1327             grok_number|5.007002||p
1328             grok_numeric_radix|5.007002||p
1329             grok_oct|5.007003||p
1330             gv_AVadd|||
1331             gv_HVadd|||
1332             gv_IOadd|||
1333             gv_SVadd|||
1334             gv_add_by_type||5.011000|
1335             gv_autoload4||5.004000|
1336             gv_autoload_pvn||5.015004|
1337             gv_autoload_pv||5.015004|
1338             gv_autoload_sv||5.015004|
1339             gv_check|||
1340             gv_const_sv||5.009003|
1341             gv_display|||
1342             gv_dump||5.006000|
1343             gv_efullname3||5.003070|
1344             gv_efullname4||5.006001|
1345             gv_efullname|||
1346             gv_fetchfile_flags||5.009005|
1347             gv_fetchfile|||
1348             gv_fetchmeth_autoload||5.007003|
1349             gv_fetchmeth_pv_autoload||5.015004|
1350             gv_fetchmeth_pvn_autoload||5.015004|
1351             gv_fetchmeth_pvn||5.015004|
1352             gv_fetchmeth_pv||5.015004|
1353             gv_fetchmeth_sv_autoload||5.015004|
1354             gv_fetchmeth_sv||5.015004|
1355             gv_fetchmethod_autoload||5.004000|
1356             gv_fetchmethod_flags|||p
1357             gv_fetchmethod|||
1358             gv_fetchmeth|||
1359             gv_fetchpvn_flags|5.009002||p
1360             gv_fetchpvn|||p
1361             gv_fetchpvs|5.009004||p
1362             gv_fetchpv|||
1363             gv_fetchsv|5.009002||p
1364             gv_fullname3||5.003070|
1365             gv_fullname4||5.006001|
1366             gv_fullname|||
1367             gv_handler||5.007001|
1368             gv_init_pvn|5.015004||p
1369             gv_init_pv|5.015004||p
1370             gv_init_sv|5.015004||p
1371             gv_init|||
1372             gv_name_set||5.009004|
1373             gv_stashpvn|5.003070||p
1374             gv_stashpvs|5.009003||p
1375             gv_stashpv|||
1376             gv_stashsv|||
1377             he_dup|||
1378             hek_dup|||
1379             hv_assert|||
1380             hv_clear_placeholders||5.009001|
1381             hv_clear|||
1382             hv_common_key_len||5.010000|
1383             hv_common||5.010000|
1384             hv_copy_hints_hv||5.009004|
1385             hv_delayfree_ent||5.004000|
1386             hv_delete_ent||5.003070|
1387             hv_delete|||
1388             hv_eiter_p||5.009003|
1389             hv_eiter_set||5.009003|
1390             hv_exists_ent||5.003070|
1391             hv_exists|||
1392             hv_fetch_ent||5.003070|
1393             hv_fetchs|5.009003||p
1394             hv_fetch|||
1395             hv_fill||5.013002|
1396             hv_free_ent||5.004000|
1397             hv_iterinit|||
1398             hv_iterkeysv||5.003070|
1399             hv_iterkey|||
1400             hv_iternextsv|||
1401             hv_iternext|||
1402             hv_iterval|||
1403             hv_ksplit||5.003070|
1404             hv_magic|||
1405             hv_name_set||5.009003|
1406             hv_placeholders_get||5.009003|
1407             hv_placeholders_set||5.009003|
1408             hv_rand_set||5.018000|
1409             hv_riter_p||5.009003|
1410             hv_riter_set||5.009003|
1411             hv_scalar||5.009001|
1412             hv_store_ent||5.003070|
1413             hv_stores|5.009004||p
1414             hv_store|||
1415             hv_undef|||
1416             ibcmp_locale||5.004000|
1417             ibcmp_utf8||5.007003|
1418             ibcmp|||
1419             init_global_struct|||
1420             init_stacks||5.005000|
1421             init_tm||5.007002|
1422             instr|||n
1423             intro_my||5.004000|
1424             isALNUMC_A|||p
1425             isALNUMC|5.006000||p
1426             isALNUM_A|||p
1427             isALNUM|||p
1428             isALPHANUMERIC_A|||p
1429             isALPHANUMERIC|5.017008||p
1430             isALPHA_A|||p
1431             isALPHA|||p
1432             isASCII_A|||p
1433             isASCII|5.006000||p
1434             isBLANK_A|||p
1435             isBLANK|5.006001||p
1436             isC9_STRICT_UTF8_CHAR|||n
1437             isCNTRL_A|||p
1438             isCNTRL|5.006000||p
1439             isDIGIT_A|||p
1440             isDIGIT|||p
1441             isGRAPH_A|||p
1442             isGRAPH|5.006000||p
1443             isGV_with_GP|||p
1444             isIDCONT_A|||p
1445             isIDCONT|5.017008||p
1446             isIDFIRST_A|||p
1447             isIDFIRST|||p
1448             isLOWER_A|||p
1449             isLOWER|||p
1450             isOCTAL_A|||p
1451             isOCTAL|5.013005||p
1452             isPRINT_A|||p
1453             isPRINT|5.004000||p
1454             isPSXSPC_A|||p
1455             isPSXSPC|5.006001||p
1456             isPUNCT_A|||p
1457             isPUNCT|5.006000||p
1458             isSPACE_A|||p
1459             isSPACE|||p
1460             isSTRICT_UTF8_CHAR|||n
1461             isUPPER_A|||p
1462             isUPPER|||p
1463             isUTF8_CHAR_flags|||
1464             isUTF8_CHAR||5.021001|n
1465             isWORDCHAR_A|||p
1466             isWORDCHAR|5.013006||p
1467             isXDIGIT_A|||p
1468             isXDIGIT|5.006000||p
1469             is_ascii_string||5.011000|n
1470             is_c9strict_utf8_string_loclen|||n
1471             is_c9strict_utf8_string_loc|||n
1472             is_c9strict_utf8_string|||n
1473             is_invariant_string||5.021007|n
1474             is_lvalue_sub||5.007001|
1475             is_safe_syscall||5.019004|
1476             is_strict_utf8_string_loclen|||n
1477             is_strict_utf8_string_loc|||n
1478             is_strict_utf8_string|||n
1479             is_utf8_char_buf||5.015008|n
1480             is_utf8_fixed_width_buf_flags|||n
1481             is_utf8_fixed_width_buf_loc_flags|||n
1482             is_utf8_fixed_width_buf_loclen_flags|||n
1483             is_utf8_invariant_string_loc|||n
1484             is_utf8_invariant_string|||n
1485             is_utf8_string_flags|||n
1486             is_utf8_string_loc_flags|||n
1487             is_utf8_string_loclen_flags|||n
1488             is_utf8_string_loclen||5.009003|n
1489             is_utf8_string_loc||5.008001|n
1490             is_utf8_string||5.006001|n
1491             is_utf8_valid_partial_char_flags|||n
1492             is_utf8_valid_partial_char|||n
1493             isinfnan||5.021004|n
1494             items|||n
1495             ix|||n
1496             leave_scope|||
1497             lex_stuff_pvs||5.013005|
1498             load_module_nocontext|||vn
1499             load_module|5.006000||pv
1500             looks_like_number|||
1501             mPUSHi|5.009002||p
1502             mPUSHn|5.009002||p
1503             mPUSHp|5.009002||p
1504             mPUSHs|5.010001||p
1505             mPUSHu|5.009002||p
1506             mXPUSHi|5.009002||p
1507             mXPUSHn|5.009002||p
1508             mXPUSHp|5.009002||p
1509             mXPUSHs|5.010001||p
1510             mXPUSHu|5.009002||p
1511             magic_dump||5.006000|
1512             malloc||5.007002|n
1513             markstack_grow||5.021001|
1514             memEQs|5.009005||p
1515             memEQ|5.004000||p
1516             memNEs|5.009005||p
1517             memNE|5.004000||p
1518             mess_nocontext|||pvn
1519             mess_sv|5.013001||p
1520             mess|5.006000||pv
1521             mfree||5.007002|n
1522             mg_clear|||
1523             mg_copy|||
1524             mg_dup|||
1525             mg_findext|5.013008||pn
1526             mg_find|||n
1527             mg_free_type||5.013006|
1528             mg_freeext|||
1529             mg_free|||
1530             mg_get|||
1531             mg_magical|||n
1532             mg_set|||
1533             mg_size||5.005000|
1534             mini_mktime||5.007002|n
1535             moreswitches|||
1536             mro_get_from_name||5.010001|
1537             mro_get_linear_isa||5.009005|
1538             mro_get_private_data||5.010001|
1539             mro_isa_changed_in|||
1540             mro_method_changed_in||5.009005|
1541             mro_register||5.010001|
1542             mro_set_mro||5.010001|
1543             mro_set_private_data||5.010001|
1544             my_atof2||5.007002|
1545             my_atof3|||
1546             my_atof||5.006000|
1547             my_chsize|||
1548             my_cxt_index|||
1549             my_cxt_init|||
1550             my_dirfd||5.009005|n
1551             my_exit|||
1552             my_failure_exit||5.004000|
1553             my_fflush_all||5.006000|
1554             my_fork||5.007003|n
1555             my_lstat||5.024000|
1556             my_pclose||5.003070|
1557             my_popen_list||5.007001|
1558             my_popen||5.003070|
1559             my_setenv|||
1560             my_snprintf|5.009004||pvn
1561             my_socketpair||5.007003|n
1562             my_sprintf|5.009003||pvn
1563             my_stat||5.024000|
1564             my_strftime||5.007002|
1565             my_strlcat|5.009004||pn
1566             my_strlcpy|5.009004||pn
1567             my_strnlen|||pn
1568             my_strtod|||n
1569             my_vsnprintf||5.009004|n
1570             newANONATTRSUB||5.006000|
1571             newANONHASH|||
1572             newANONLIST|||
1573             newANONSUB|||
1574             newASSIGNOP|||
1575             newATTRSUB||5.006000|
1576             newAVREF|||
1577             newAV|||
1578             newBINOP|||
1579             newCONDOP|||
1580             newCONSTSUB_flags||5.015006|
1581             newCONSTSUB|5.004050||p
1582             newCVREF|||
1583             newDEFSVOP||5.021006|
1584             newFORM|||
1585             newFOROP||5.013007|
1586             newGIVENOP||5.009003|
1587             newGVOP|||
1588             newGVREF|||
1589             newGVgen_flags||5.015004|
1590             newGVgen|||
1591             newHVREF|||
1592             newHVhv||5.005000|
1593             newHV|||
1594             newIO|||
1595             newLISTOP|||
1596             newLOGOP|||
1597             newLOOPEX|||
1598             newLOOPOP|||
1599             newMETHOP_named||5.021005|
1600             newMETHOP||5.021005|
1601             newMYSUB||5.017004|
1602             newNULLLIST|||
1603             newOP|||
1604             newPADOP|||
1605             newPMOP|||
1606             newPROG|||
1607             newPVOP|||
1608             newRANGE|||
1609             newRV_inc|5.004000||p
1610             newRV_noinc|5.004000||p
1611             newRV|||
1612             newSLICEOP|||
1613             newSTATEOP|||
1614             newSUB|||
1615             newSVOP|||
1616             newSVREF|||
1617             newSV_type|5.009005||p
1618             newSVhek||5.009003|
1619             newSViv|||
1620             newSVnv|||
1621             newSVpadname||5.017004|
1622             newSVpv_share||5.013006|
1623             newSVpvf_nocontext|||vn
1624             newSVpvf||5.004000|v
1625             newSVpvn_flags|5.010001||p
1626             newSVpvn_share|5.007001||p
1627             newSVpvn_utf8|5.010001||p
1628             newSVpvn|5.004050||p
1629             newSVpvs_flags|5.010001||p
1630             newSVpvs_share|5.009003||p
1631             newSVpvs|5.009003||p
1632             newSVpv|||
1633             newSVrv|||
1634             newSVsv_flags|||
1635             newSVsv_nomg|||
1636             newSVsv|||
1637             newSVuv|5.006000||p
1638             newSV|||
1639             newUNOP_AUX||5.021007|
1640             newUNOP|||
1641             newWHENOP||5.009003|
1642             newWHILEOP||5.013007|
1643             newXSproto||5.006000|
1644             newXS||5.006000|
1645             new_stackinfo||5.005000|
1646             new_version||5.009000|
1647             ninstr|||n
1648             nothreadhook||5.008000|
1649             op_append_elem||5.013006|
1650             op_append_list||5.013006|
1651             op_class|||
1652             op_contextualize||5.013006|
1653             op_convert_list||5.021006|
1654             op_dump||5.006000|
1655             op_free|||
1656             op_linklist||5.013006|
1657             op_null||5.007002|
1658             op_parent||5.021002|n
1659             op_prepend_elem||5.013006|
1660             op_refcnt_lock||5.009002|
1661             op_refcnt_unlock||5.009002|
1662             op_sibling_splice||5.021002|n
1663             pMY_CXT_|5.007003||p
1664             pMY_CXT|5.007003||p
1665             pTHX_|5.006000||p
1666             pTHX|5.006000||p
1667             packWARN|5.007003||p
1668             pack_cat||5.007003|
1669             packlist||5.008001|
1670             pad_add_anon||5.008001|
1671             pad_add_name_pvn||5.015001|
1672             pad_add_name_pvs||5.015001|
1673             pad_add_name_pv||5.015001|
1674             pad_add_name_sv||5.015001|
1675             pad_compname_type||5.009003|
1676             pad_findmy_pvn||5.015001|
1677             pad_findmy_pvs||5.015001|
1678             pad_findmy_pv||5.015001|
1679             pad_findmy_sv||5.015001|
1680             pad_new||5.008001|
1681             pad_setsv|||
1682             pad_sv|||
1683             parser_dup|||
1684             perl_alloc_using|||n
1685             perl_alloc|||n
1686             perl_clone_using|||n
1687             perl_clone|||n
1688             perl_construct|||n
1689             perl_destruct||5.007003|n
1690             perl_free|||n
1691             perl_parse||5.006000|n
1692             perl_run|||n
1693             pmop_dump||5.006000|
1694             pop_scope|||
1695             pregcomp||5.009005|
1696             pregexec|||
1697             pregfree2||5.011000|
1698             pregfree|||
1699             prep_ffi_ret|||
1700             prep_ffi_sig|||
1701             prescan_version||5.011004|
1702             printf_nocontext|||vn
1703             ptr_table_fetch||5.009005|
1704             ptr_table_free||5.009005|
1705             ptr_table_new||5.009005|
1706             ptr_table_split||5.009005|
1707             ptr_table_store||5.009005|
1708             push_scope|||
1709             pv_display|5.006000||p
1710             pv_escape|5.009004||p
1711             pv_pretty|5.009004||p
1712             pv_uni_display||5.007003|
1713             quadmath_format_needed|||n
1714             quadmath_format_single|||n
1715             re_compile||5.009005|
1716             re_dup_guts|||
1717             re_intuit_start||5.019001|
1718             re_intuit_string||5.006000|
1719             realloc||5.007002|n
1720             reentrant_free||5.024000|
1721             reentrant_init||5.024000|
1722             reentrant_retry||5.024000|vn
1723             reentrant_size||5.024000|
1724             ref||5.024000|
1725             reg_named_buff_all||5.009005|
1726             reg_named_buff_exists||5.009005|
1727             reg_named_buff_fetch||5.009005|
1728             reg_named_buff_firstkey||5.009005|
1729             reg_named_buff_nextkey||5.009005|
1730             reg_named_buff_scalar||5.009005|
1731             regdump||5.005000|
1732             regdupe_internal|||
1733             regexec_flags||5.005000|
1734             regfree_internal||5.009005|
1735             reginitcolors||5.006000|
1736             regnext||5.005000|
1737             repeatcpy|||n
1738             require_pv||5.006000|
1739             rninstr|||n
1740             rsignal_state||5.004000|
1741             rsignal||5.004000|
1742             runops_debug||5.005000|
1743             runops_standard||5.005000|
1744             rv2cv_op_cv||5.013006|
1745             rvpv_dup|||
1746             safesyscalloc||5.006000|n
1747             safesysfree||5.006000|n
1748             safesysmalloc||5.006000|n
1749             safesysrealloc||5.006000|n
1750             save_I16||5.004000|
1751             save_I32|||
1752             save_I8||5.006000|
1753             save_adelete||5.011000|
1754             save_aelem_flags||5.011000|
1755             save_aelem||5.004050|
1756             save_alloc||5.006000|
1757             save_aptr|||
1758             save_ary|||
1759             save_bool||5.008001|
1760             save_clearsv|||
1761             save_delete|||
1762             save_destructor_x||5.006000|
1763             save_destructor||5.006000|
1764             save_freeop|||
1765             save_freepv|||
1766             save_freesv|||
1767             save_generic_pvref||5.006001|
1768             save_generic_svref||5.005030|
1769             save_gp||5.004000|
1770             save_hash|||
1771             save_hdelete||5.011000|
1772             save_helem_flags||5.011000|
1773             save_helem||5.004050|
1774             save_hints||5.010001|
1775             save_hptr|||
1776             save_int|||
1777             save_item|||
1778             save_iv||5.005000|
1779             save_list|||
1780             save_long|||
1781             save_mortalizesv||5.007001|
1782             save_nogv|||
1783             save_op||5.005000|
1784             save_padsv_and_mortalize||5.010001|
1785             save_pptr|||
1786             save_pushi32ptr||5.010001|
1787             save_pushptrptr||5.010001|
1788             save_pushptr||5.010001|
1789             save_re_context||5.006000|
1790             save_scalar|||
1791             save_set_svflags||5.009000|
1792             save_shared_pvref||5.007003|
1793             save_sptr|||
1794             save_svref|||
1795             save_vptr||5.006000|
1796             savepvn|||
1797             savepvs||5.009003|
1798             savepv|||
1799             savesharedpvn||5.009005|
1800             savesharedpvs||5.013006|
1801             savesharedpv||5.007003|
1802             savesharedsvpv||5.013006|
1803             savestack_grow_cnt||5.008001|
1804             savestack_grow|||
1805             savesvpv||5.009002|
1806             scan_bin||5.006000|
1807             scan_hex|||
1808             scan_num||5.007001|
1809             scan_oct|||
1810             scan_version||5.009001|
1811             scan_vstring||5.009005|
1812             seed||5.008001|
1813             set_context||5.006000|n
1814             setdefout|||
1815             share_hek||5.004000|
1816             si_dup|||
1817             sortsv_flags||5.009003|
1818             sortsv||5.007003|
1819             ss_dup|||
1820             stack_grow|||
1821             start_subparse||5.004000|
1822             strEQ|||
1823             strGE|||
1824             strGT|||
1825             strLE|||
1826             strLT|||
1827             strNE|||
1828             str_to_version||5.006000|
1829             strnEQ|||
1830             strnNE|||
1831             sv_2bool_flags||5.013006|
1832             sv_2bool|||
1833             sv_2cv|||
1834             sv_2io|||
1835             sv_2iv_flags||5.009001|
1836             sv_2iv|||
1837             sv_2mortal|||
1838             sv_2nv_flags||5.013001|
1839             sv_2pv_flags|5.007002||p
1840             sv_2pv_nolen|5.006000||p
1841             sv_2pvbyte_nolen|5.006000||p
1842             sv_2pvbyte|5.006000||p
1843             sv_2pvutf8_nolen||5.006000|
1844             sv_2pvutf8||5.006000|
1845             sv_2pv|||
1846             sv_2uv_flags||5.009001|
1847             sv_2uv|5.004000||p
1848             sv_backoff|||n
1849             sv_bless|||
1850             sv_cat_decode||5.008001|
1851             sv_catpv_flags||5.013006|
1852             sv_catpv_mg|5.004050||p
1853             sv_catpv_nomg||5.013006|
1854             sv_catpvf_mg_nocontext|||pvn
1855             sv_catpvf_mg|5.006000|5.004000|pv
1856             sv_catpvf_nocontext|||vn
1857             sv_catpvf||5.004000|v
1858             sv_catpvn_flags||5.007002|
1859             sv_catpvn_mg|5.004050||p
1860             sv_catpvn_nomg|5.007002||p
1861             sv_catpvn|||
1862             sv_catpvs_flags||5.013006|
1863             sv_catpvs_mg||5.013006|
1864             sv_catpvs_nomg||5.013006|
1865             sv_catpvs|5.009003||p
1866             sv_catpv|||
1867             sv_catsv_flags||5.007002|
1868             sv_catsv_mg|5.004050||p
1869             sv_catsv_nomg|5.007002||p
1870             sv_catsv|||
1871             sv_chop|||
1872             sv_clear|||
1873             sv_cmp_flags||5.013006|
1874             sv_cmp_locale_flags||5.013006|
1875             sv_cmp_locale||5.004000|
1876             sv_cmp|||
1877             sv_collxfrm_flags||5.013006|
1878             sv_collxfrm|||
1879             sv_copypv_flags||5.017002|
1880             sv_copypv_nomg||5.017002|
1881             sv_copypv|||
1882             sv_dec_nomg||5.013002|
1883             sv_dec|||
1884             sv_derived_from_pvn||5.015004|
1885             sv_derived_from_pv||5.015004|
1886             sv_derived_from_sv||5.015004|
1887             sv_derived_from||5.004000|
1888             sv_destroyable||5.010000|
1889             sv_does_pvn||5.015004|
1890             sv_does_pv||5.015004|
1891             sv_does_sv||5.015004|
1892             sv_does||5.009004|
1893             sv_dump|||
1894             sv_dup_inc|||
1895             sv_dup|||
1896             sv_eq_flags||5.013006|
1897             sv_eq|||
1898             sv_force_normal_flags||5.007001|
1899             sv_force_normal||5.006000|
1900             sv_free|||
1901             sv_gets||5.003070|
1902             sv_grow|||
1903             sv_inc_nomg||5.013002|
1904             sv_inc|||
1905             sv_insert_flags||5.010001|
1906             sv_insert|||
1907             sv_isa|||
1908             sv_isobject|||
1909             sv_iv||5.005000|
1910             sv_len_utf8||5.006000|
1911             sv_len|||
1912             sv_magic_portable|5.024000|5.004000|p
1913             sv_magicext||5.007003|
1914             sv_magic|||
1915             sv_mortalcopy|||
1916             sv_newmortal|||
1917             sv_newref|||
1918             sv_nolocking||5.007003|
1919             sv_nosharing||5.007003|
1920             sv_nounlocking|||
1921             sv_nv||5.005000|
1922             sv_peek||5.005000|
1923             sv_pos_b2u_flags||5.019003|
1924             sv_pos_u2b_flags||5.011005|
1925             sv_pvbyten_force||5.006000|
1926             sv_pvbyten||5.006000|
1927             sv_pvbyte||5.006000|
1928             sv_pvn_force_flags|5.007002||p
1929             sv_pvn_force|||
1930             sv_pvn_nomg|5.007003|5.005000|p
1931             sv_pvn||5.005000|
1932             sv_pvutf8n_force||5.006000|
1933             sv_pvutf8n||5.006000|
1934             sv_pvutf8||5.006000|
1935             sv_pv||5.006000|
1936             sv_recode_to_utf8||5.007003|
1937             sv_reftype|||
1938             sv_ref|||
1939             sv_replace|||
1940             sv_report_used|||
1941             sv_reset|||
1942             sv_rvunweaken|||
1943             sv_rvweaken||5.006000|
1944             sv_set_undef|||
1945             sv_setiv_mg|5.004050||p
1946             sv_setiv|||
1947             sv_setnv_mg|5.006000||p
1948             sv_setnv|||
1949             sv_setpv_bufsize|||
1950             sv_setpv_mg|5.004050||p
1951             sv_setpvf_mg_nocontext|||pvn
1952             sv_setpvf_mg|5.006000|5.004000|pv
1953             sv_setpvf_nocontext|||vn
1954             sv_setpvf||5.004000|v
1955             sv_setpviv_mg||5.008001|
1956             sv_setpviv||5.008001|
1957             sv_setpvn_mg|5.004050||p
1958             sv_setpvn|||
1959             sv_setpvs_mg||5.013006|
1960             sv_setpvs|5.009004||p
1961             sv_setpv|||
1962             sv_setref_iv|||
1963             sv_setref_nv|||
1964             sv_setref_pvn|||
1965             sv_setref_pvs||5.024000|
1966             sv_setref_pv|||
1967             sv_setref_uv||5.007001|
1968             sv_setsv_flags||5.007002|
1969             sv_setsv_mg|5.004050||p
1970             sv_setsv_nomg|5.007002||p
1971             sv_setsv|||
1972             sv_setuv_mg|5.004050||p
1973             sv_setuv|5.004000||p
1974             sv_string_from_errnum|||
1975             sv_tainted||5.004000|
1976             sv_taint||5.004000|
1977             sv_true||5.005000|
1978             sv_uni_display||5.007003|
1979             sv_unmagicext|5.013008||p
1980             sv_unmagic|||
1981             sv_unref_flags||5.007001|
1982             sv_unref|||
1983             sv_untaint||5.004000|
1984             sv_upgrade|||
1985             sv_usepvn_flags||5.009004|
1986             sv_usepvn_mg|5.004050||p
1987             sv_usepvn|||
1988             sv_utf8_decode||5.006000|
1989             sv_utf8_downgrade||5.006000|
1990             sv_utf8_encode||5.006000|
1991             sv_utf8_upgrade_flags_grow||5.011000|
1992             sv_utf8_upgrade_flags||5.007002|
1993             sv_utf8_upgrade_nomg||5.007002|
1994             sv_utf8_upgrade||5.007001|
1995             sv_uv|5.005000||p
1996             sv_vcatpvf_mg|5.006000|5.004000|p
1997             sv_vcatpvfn_flags||5.017002|
1998             sv_vcatpvfn||5.004000|
1999             sv_vcatpvf|5.006000|5.004000|p
2000             sv_vsetpvf_mg|5.006000|5.004000|p
2001             sv_vsetpvfn||5.004000|
2002             sv_vsetpvf|5.006000|5.004000|p
2003             svtype|||
2004             switch_to_global_locale|||n
2005             sync_locale||5.021004|n
2006             sys_init3||5.010000|n
2007             sys_init||5.010000|n
2008             sys_intern_clear|||
2009             sys_intern_dup|||
2010             sys_intern_init|||
2011             sys_term||5.010000|n
2012             taint_env|||
2013             taint_proper|||
2014             toFOLD_utf8_safe|||
2015             toFOLD_utf8||5.019001|
2016             toFOLD_uvchr||5.023009|
2017             toFOLD||5.019001|
2018             toLOWER_L1||5.019001|
2019             toLOWER_LC||5.004000|
2020             toLOWER_utf8_safe|||
2021             toLOWER_utf8||5.015007|
2022             toLOWER_uvchr||5.023009|
2023             toLOWER|||
2024             toTITLE_utf8_safe|||
2025             toTITLE_utf8||5.015007|
2026             toTITLE_uvchr||5.023009|
2027             toTITLE||5.019001|
2028             toUPPER_utf8_safe|||
2029             toUPPER_utf8||5.015007|
2030             toUPPER_uvchr||5.023009|
2031             toUPPER|||
2032             unlnk|||
2033             unpack_str||5.007003|
2034             unpackstring||5.008001|
2035             unsharepvn||5.003070|
2036             upg_version||5.009005|
2037             utf8_distance||5.006000|
2038             utf8_hop_back|||n
2039             utf8_hop_forward|||n
2040             utf8_hop_safe|||n
2041             utf8_hop||5.006000|n
2042             utf8_length||5.007001|
2043             utf8_to_uvchr_buf|5.015009||p
2044             utf8_to_uvchr|5.007001||p
2045             utf8n_to_uvchr_error|||n
2046             utf8n_to_uvchr||5.007001|n
2047             utf8n_to_uvuni||5.007001|
2048             uvchr_to_utf8_flags||5.007003|
2049             uvchr_to_utf8||5.007001|
2050             uvoffuni_to_utf8_flags||5.019004|
2051             uvuni_to_utf8_flags||5.007003|
2052             uvuni_to_utf8||5.007001|
2053             valid_utf8_to_uvchr||5.015009|n
2054             vcmp||5.009000|
2055             vcroak||5.006000|
2056             vdeb||5.007003|
2057             vform||5.006000|
2058             vload_module|5.006000||p
2059             vmess|5.006000||p
2060             vnewSVpvf|5.006000|5.004000|p
2061             vnormal||5.009002|
2062             vnumify||5.009000|
2063             vstringify||5.009000|
2064             vverify||5.009003|
2065             vwarner||5.006000|
2066             vwarn||5.006000|
2067             warn_nocontext|||pvn
2068             warn_sv|5.013001||p
2069             warner_nocontext|||vn
2070             warner|5.006000|5.004000|pv
2071             warn|||v
2072             whichsig_pvn||5.015004|
2073             whichsig_pv||5.015004|
2074             whichsig_sv||5.015004|
2075             whichsig|||
2076             wrap_op_checker||5.015008|
2077             );
2078              
2079             if (exists $opt{'list-unsupported'}) {
2080             my $f;
2081             for $f (sort { lc $a cmp lc $b } keys %API) {
2082             next unless $API{$f}{todo};
2083             print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
2084             }
2085             exit 0;
2086             }
2087              
2088             # Scan for possible replacement candidates
2089              
2090             my(%replace, %need, %hints, %warnings, %depends);
2091             my $replace = 0;
2092             my($hint, $define, $function);
2093              
2094             sub find_api
2095             {
2096             my $code = shift;
2097             $code =~ s{
2098             / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
2099             | "[^"\\]*(?:\\.[^"\\]*)*"
2100             | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
2101             grep { exists $API{$_} } $code =~ /(\w+)/mg;
2102             }
2103              
2104             while () {
2105             if ($hint) {
2106             my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
2107             if (m{^\s*\*\s(.*?)\s*$}) {
2108             for (@{$hint->[1]}) {
2109             $h->{$_} ||= ''; # suppress warning with older perls
2110             $h->{$_} .= "$1\n";
2111             }
2112             }
2113             else { undef $hint }
2114             }
2115              
2116             $hint = [$1, [split /,?\s+/, $2]]
2117             if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
2118              
2119             if ($define) {
2120             if ($define->[1] =~ /\\$/) {
2121             $define->[1] .= $_;
2122             }
2123             else {
2124             if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
2125             my @n = find_api($define->[1]);
2126             push @{$depends{$define->[0]}}, @n if @n
2127             }
2128             undef $define;
2129             }
2130             }
2131              
2132             $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
2133              
2134             if ($function) {
2135             if (/^}/) {
2136             if (exists $API{$function->[0]}) {
2137             my @n = find_api($function->[1]);
2138             push @{$depends{$function->[0]}}, @n if @n
2139             }
2140             undef $function;
2141             }
2142             else {
2143             $function->[1] .= $_;
2144             }
2145             }
2146              
2147             $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
2148              
2149             $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
2150             $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
2151             $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
2152             $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
2153              
2154             if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
2155             my @deps = map { s/\s+//g; $_ } split /,/, $3;
2156             my $d;
2157             for $d (map { s/\s+//g; $_ } split /,/, $1) {
2158             push @{$depends{$d}}, @deps;
2159             }
2160             }
2161              
2162             $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
2163             }
2164              
2165             for (values %depends) {
2166             my %s;
2167             $_ = [sort grep !$s{$_}++, @$_];
2168             }
2169              
2170             if (exists $opt{'api-info'}) {
2171             my $f;
2172             my $count = 0;
2173             my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
2174             for $f (sort { lc $a cmp lc $b } keys %API) {
2175             next unless $f =~ /$match/;
2176             print "\n=== $f ===\n\n";
2177             my $info = 0;
2178             if ($API{$f}{base} || $API{$f}{todo}) {
2179             my $base = format_version($API{$f}{base} || $API{$f}{todo});
2180             print "Supported at least starting from perl-$base.\n";
2181             $info++;
2182             }
2183             if ($API{$f}{provided}) {
2184             my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
2185             print "Support by $ppport provided back to perl-$todo.\n";
2186             print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
2187             print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
2188             print "\n$hints{$f}" if exists $hints{$f};
2189             print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
2190             $info++;
2191             }
2192             print "No portability information available.\n" unless $info;
2193             $count++;
2194             }
2195             $count or print "Found no API matching '$opt{'api-info'}'.";
2196             print "\n";
2197             exit 0;
2198             }
2199              
2200             if (exists $opt{'list-provided'}) {
2201             my $f;
2202             for $f (sort { lc $a cmp lc $b } keys %API) {
2203             next unless $API{$f}{provided};
2204             my @flags;
2205             push @flags, 'explicit' if exists $need{$f};
2206             push @flags, 'depend' if exists $depends{$f};
2207             push @flags, 'hint' if exists $hints{$f};
2208             push @flags, 'warning' if exists $warnings{$f};
2209             my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
2210             print "$f$flags\n";
2211             }
2212             exit 0;
2213             }
2214              
2215             my @files;
2216             my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
2217             my $srcext = join '|', map { quotemeta $_ } @srcext;
2218              
2219             if (@ARGV) {
2220             my %seen;
2221             for (@ARGV) {
2222             if (-e) {
2223             if (-f) {
2224             push @files, $_ unless $seen{$_}++;
2225             }
2226             else { warn "'$_' is not a file.\n" }
2227             }
2228             else {
2229             my @new = grep { -f } glob $_
2230             or warn "'$_' does not exist.\n";
2231             push @files, grep { !$seen{$_}++ } @new;
2232             }
2233             }
2234             }
2235             else {
2236             eval {
2237             require File::Find;
2238             File::Find::find(sub {
2239             $File::Find::name =~ /($srcext)$/i
2240             and push @files, $File::Find::name;
2241             }, '.');
2242             };
2243             if ($@) {
2244             @files = map { glob "*$_" } @srcext;
2245             }
2246             }
2247              
2248             if (!@ARGV || $opt{filter}) {
2249             my(@in, @out);
2250             my %xsc = map { /(.*)\.xs$/ && ("$1.c" => 1) } @files;
2251             #warn "\@files=",@files,"\%xsc=",join ",",keys %xsc;
2252             for (@files) {
2253             if (/^(.*)\.xs$/) { $xsc{"$1.cc"} = 1; }
2254             my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
2255             push @{ $out ? \@out : \@in }, $_;
2256             }
2257             if (@ARGV && @out) {
2258             warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
2259             }
2260             @files = @in;
2261             }
2262              
2263             die "No input files given!\n" unless @files;
2264              
2265             my(%files, %global, %revreplace);
2266             %revreplace = reverse %replace;
2267             my $filename;
2268             my $patch_opened = 0;
2269              
2270             for $filename (@files) {
2271             unless (open IN, "<$filename") {
2272             warn "Unable to read from $filename: $!\n";
2273             next;
2274             }
2275              
2276             info("Scanning $filename ...");
2277              
2278             my $c = do { local $/; };
2279             close IN;
2280              
2281             my %file = (orig => $c, changes => 0);
2282              
2283             # Temporarily remove C/XS comments and strings from the code
2284             my @ccom;
2285              
2286             $c =~ s{
2287             ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
2288             | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
2289             | ( ^$HS*\#[^\r\n]*
2290             | "[^"\\]*(?:\\.[^"\\]*)*"
2291             | '[^'\\]*(?:\\.[^'\\]*)*'
2292             | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
2293             }{ defined $2 and push @ccom, $2;
2294             defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
2295              
2296             $file{ccom} = \@ccom;
2297             $file{code} = $c;
2298             $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
2299              
2300             my $func;
2301              
2302             for $func (keys %API) {
2303             my $match = $func;
2304             $match .= "|$revreplace{$func}" if exists $revreplace{$func};
2305             if ($c =~ /\b(?:Perl_)?($match)\b/) {
2306             $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
2307             $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
2308             if (exists $API{$func}{provided}) {
2309             $file{uses_provided}{$func}++;
2310             if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
2311             $file{uses}{$func}++;
2312             my @deps = rec_depend($func);
2313             if (@deps) {
2314             $file{uses_deps}{$func} = \@deps;
2315             for (@deps) {
2316             $file{uses}{$_} = 0 unless exists $file{uses}{$_};
2317             }
2318             }
2319             for ($func, @deps) {
2320             $file{needs}{$_} = 'static' if exists $need{$_};
2321             }
2322             }
2323             }
2324             if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
2325             if ($c =~ /\b$func\b/) {
2326             $file{uses_todo}{$func}++;
2327             }
2328             }
2329             }
2330             }
2331              
2332             while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
2333             if (exists $need{$2}) {
2334             $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
2335             }
2336             else { warning("Possibly wrong #define $1 in $filename") }
2337             }
2338              
2339             for (qw(uses needs uses_todo needed_global needed_static)) {
2340             for $func (keys %{$file{$_}}) {
2341             push @{$global{$_}{$func}}, $filename;
2342             }
2343             }
2344              
2345             $files{$filename} = \%file;
2346             }
2347              
2348             # Globally resolve NEED_'s
2349             my $need;
2350             for $need (keys %{$global{needs}}) {
2351             if (@{$global{needs}{$need}} > 1) {
2352             my @targets = @{$global{needs}{$need}};
2353             my @t = grep $files{$_}{needed_global}{$need}, @targets;
2354             @targets = @t if @t;
2355             @t = grep /\.xs$/i, @targets;
2356             @targets = @t if @t;
2357             my $target = shift @targets;
2358             $files{$target}{needs}{$need} = 'global';
2359             for (@{$global{needs}{$need}}) {
2360             $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
2361             }
2362             }
2363             }
2364              
2365             for $filename (@files) {
2366             exists $files{$filename} or next;
2367              
2368             info("=== Analyzing $filename ===");
2369              
2370             my %file = %{$files{$filename}};
2371             my $func;
2372             my $c = $file{code};
2373             my $warnings = 0;
2374              
2375             for $func (sort keys %{$file{uses_Perl}}) {
2376             if ($API{$func}{varargs}) {
2377             unless ($API{$func}{nothxarg}) {
2378             my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
2379             { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
2380             if ($changes) {
2381             warning("Doesn't pass interpreter argument aTHX to Perl_$func");
2382             $file{changes} += $changes;
2383             }
2384             }
2385             }
2386             else {
2387             warning("Uses Perl_$func instead of $func");
2388             $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
2389             {$func$1(}g);
2390             }
2391             }
2392              
2393             for $func (sort keys %{$file{uses_replace}}) {
2394             warning("Uses $func instead of $replace{$func}");
2395             $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
2396             }
2397              
2398             for $func (sort keys %{$file{uses_provided}}) {
2399             if ($file{uses}{$func}) {
2400             if (exists $file{uses_deps}{$func}) {
2401             diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
2402             }
2403             else {
2404             diag("Uses $func");
2405             }
2406             }
2407             $warnings += hint($func);
2408             }
2409              
2410             unless ($opt{quiet}) {
2411             for $func (sort keys %{$file{uses_todo}}) {
2412             print "*** WARNING: Uses $func, which may not be portable below perl ",
2413             format_version($API{$func}{todo}), ", even with '$ppport'\n";
2414             $warnings++;
2415             }
2416             }
2417              
2418             for $func (sort keys %{$file{needed_static}}) {
2419             my $message = '';
2420             if (not exists $file{uses}{$func}) {
2421             $message = "No need to define NEED_$func if $func is never used";
2422             }
2423             elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
2424             $message = "No need to define NEED_$func when already needed globally";
2425             }
2426             if ($message) {
2427             diag($message);
2428             $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
2429             }
2430             }
2431              
2432             for $func (sort keys %{$file{needed_global}}) {
2433             my $message = '';
2434             if (not exists $global{uses}{$func}) {
2435             $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
2436             }
2437             elsif (exists $file{needs}{$func}) {
2438             if ($file{needs}{$func} eq 'extern') {
2439             $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
2440             }
2441             elsif ($file{needs}{$func} eq 'static') {
2442             $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
2443             }
2444             }
2445             if ($message) {
2446             diag($message);
2447             $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
2448             }
2449             }
2450              
2451             $file{needs_inc_ppport} = keys %{$file{uses}};
2452              
2453             if ($file{needs_inc_ppport}) {
2454             my $pp = '';
2455              
2456             for $func (sort keys %{$file{needs}}) {
2457             my $type = $file{needs}{$func};
2458             next if $type eq 'extern';
2459             my $suffix = $type eq 'global' ? '_GLOBAL' : '';
2460             unless (exists $file{"needed_$type"}{$func}) {
2461             if ($type eq 'global') {
2462             diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
2463             }
2464             else {
2465             diag("File needs $func, adding static request");
2466             }
2467             $pp .= "#define NEED_$func$suffix\n";
2468             }
2469             }
2470              
2471             if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
2472             $pp = '';
2473             $file{changes}++;
2474             }
2475              
2476             unless ($file{has_inc_ppport}) {
2477             diag("Needs to include '$ppport'");
2478             $pp .= qq(#include "$ppport"\n)
2479             }
2480              
2481             if ($pp) {
2482             $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
2483             || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
2484             || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
2485             || ($c =~ s/^/$pp/);
2486             }
2487             }
2488             else {
2489             if ($file{has_inc_ppport}) {
2490             diag("No need to include '$ppport'");
2491             $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
2492             }
2493             }
2494              
2495             # put back in our C comments
2496             my $ix;
2497             my $cppc = 0;
2498             my @ccom = @{$file{ccom}};
2499             for $ix (0 .. $#ccom) {
2500             if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
2501             $cppc++;
2502             $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
2503             }
2504             else {
2505             $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
2506             }
2507             }
2508              
2509             if ($cppc) {
2510             my $s = $cppc != 1 ? 's' : '';
2511             warning("Uses $cppc C++ style comment$s, which is not portable");
2512             }
2513              
2514             my $s = $warnings != 1 ? 's' : '';
2515             my $warn = $warnings ? " ($warnings warning$s)" : '';
2516             info("Analysis completed$warn");
2517              
2518             if ($file{changes}) {
2519             if (exists $opt{copy}) {
2520             my $newfile = "$filename$opt{copy}";
2521             if (-e $newfile) {
2522             error("'$newfile' already exists, refusing to write copy of '$filename'");
2523             }
2524             else {
2525             local *F;
2526             if (open F, ">$newfile") {
2527             info("Writing copy of '$filename' with changes to '$newfile'");
2528             print F $c;
2529             close F;
2530             }
2531             else {
2532             error("Cannot open '$newfile' for writing: $!");
2533             }
2534             }
2535             }
2536             elsif (exists $opt{patch} || $opt{changes}) {
2537             if (exists $opt{patch}) {
2538             unless ($patch_opened) {
2539             if (open PATCH, ">$opt{patch}") {
2540             $patch_opened = 1;
2541             }
2542             else {
2543             error("Cannot open '$opt{patch}' for writing: $!");
2544             delete $opt{patch};
2545             $opt{changes} = 1;
2546             goto fallback;
2547             }
2548             }
2549             mydiff(\*PATCH, $filename, $c);
2550             }
2551             else {
2552             fallback:
2553             info("Suggested changes:");
2554             mydiff(\*STDOUT, $filename, $c);
2555             }
2556             }
2557             else {
2558             my $s = $file{changes} == 1 ? '' : 's';
2559             info("$file{changes} potentially required change$s detected");
2560             }
2561             }
2562             else {
2563             info("Looks good");
2564             }
2565             }
2566              
2567             close PATCH if $patch_opened;
2568              
2569             exit 0;
2570              
2571              
2572             sub try_use { eval "use @_;"; return $@ eq '' }
2573              
2574             sub mydiff
2575             {
2576             local *F = shift;
2577             my($file, $str) = @_;
2578             my $diff;
2579              
2580             if (exists $opt{diff}) {
2581             $diff = run_diff($opt{diff}, $file, $str);
2582             }
2583              
2584             if (!defined $diff and try_use('Text::Diff')) {
2585             $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
2586             $diff = <
2587             --- $file
2588             +++ $file.patched
2589             HEADER
2590             }
2591              
2592             if (!defined $diff) {
2593             $diff = run_diff('diff -u', $file, $str);
2594             }
2595              
2596             if (!defined $diff) {
2597             $diff = run_diff('diff', $file, $str);
2598             }
2599              
2600             if (!defined $diff) {
2601             error("Cannot generate a diff. Please install Text::Diff or use --copy.");
2602             return;
2603             }
2604              
2605             print F $diff;
2606             }
2607              
2608             sub run_diff
2609             {
2610             my($prog, $file, $str) = @_;
2611             my $tmp = 'dppptemp';
2612             my $suf = 'aaa';
2613             my $diff = '';
2614             local *F;
2615              
2616             while (-e "$tmp.$suf") { $suf++ }
2617             $tmp = "$tmp.$suf";
2618              
2619             if (open F, ">$tmp") {
2620             print F $str;
2621             close F;
2622              
2623             if (open F, "$prog $file $tmp |") {
2624             while () {
2625             s/\Q$tmp\E/$file.patched/;
2626             $diff .= $_;
2627             }
2628             close F;
2629             unlink $tmp;
2630             return $diff;
2631             }
2632              
2633             unlink $tmp;
2634             }
2635             else {
2636             error("Cannot open '$tmp' for writing: $!");
2637             }
2638              
2639             return undef;
2640             }
2641              
2642             sub rec_depend
2643             {
2644             my($func, $seen) = @_;
2645             return () unless exists $depends{$func};
2646             $seen = {%{$seen||{}}};
2647             return () if $seen->{$func}++;
2648             my %s;
2649             grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
2650             }
2651              
2652             sub parse_version
2653             {
2654             my $ver = shift;
2655              
2656             if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
2657             return ($1, $2, $3);
2658             }
2659             elsif ($ver !~ /^\d+\.[\d_]+$/) {
2660             die "cannot parse version '$ver'\n";
2661             }
2662              
2663             $ver =~ s/_//g;
2664             $ver =~ s/$/000000/;
2665              
2666             my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
2667              
2668             $v = int $v;
2669             $s = int $s;
2670              
2671             if ($r < 5 || ($r == 5 && $v < 6)) {
2672             if ($s % 10) {
2673             die "cannot parse version '$ver'\n";
2674             }
2675             }
2676              
2677             return ($r, $v, $s);
2678             }
2679              
2680             sub format_version
2681             {
2682             my $ver = shift;
2683              
2684             $ver =~ s/$/000000/;
2685             my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
2686              
2687             $v = int $v;
2688             $s = int $s;
2689              
2690             if ($r < 5 || ($r == 5 && $v < 6)) {
2691             if ($s % 10) {
2692             die "invalid version '$ver'\n";
2693             }
2694             $s /= 10;
2695              
2696             $ver = sprintf "%d.%03d", $r, $v;
2697             $s > 0 and $ver .= sprintf "_%02d", $s;
2698              
2699             return $ver;
2700             }
2701              
2702             return sprintf "%d.%d.%d", $r, $v, $s;
2703             }
2704              
2705             sub info
2706             {
2707             $opt{quiet} and return;
2708             print @_, "\n";
2709             }
2710              
2711             sub diag
2712             {
2713             $opt{quiet} and return;
2714             $opt{diag} and print @_, "\n";
2715             }
2716              
2717             sub warning
2718             {
2719             $opt{quiet} and return;
2720             print "*** ", @_, "\n";
2721             }
2722              
2723             sub error
2724             {
2725             print "*** ERROR: ", @_, "\n";
2726             }
2727              
2728             my %given_hints;
2729             my %given_warnings;
2730             sub hint
2731             {
2732             $opt{quiet} and return;
2733             my $func = shift;
2734             my $rv = 0;
2735             if (exists $warnings{$func} && !$given_warnings{$func}++) {
2736             my $warn = $warnings{$func};
2737             $warn =~ s!^!*** !mg;
2738             print "*** WARNING: $func\n", $warn;
2739             $rv++;
2740             }
2741             if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
2742             my $hint = $hints{$func};
2743             $hint =~ s/^/ /mg;
2744             print " --- hint for $func ---\n", $hint;
2745             }
2746             $rv;
2747             }
2748              
2749             sub usage
2750             {
2751             my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
2752             my %M = ( 'I' => '*' );
2753             $usage =~ s/^\s*perl\s+\S+/$^X $0/;
2754             $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
2755              
2756             print <
2757              
2758             Usage: $usage
2759              
2760             See perldoc $0 for details.
2761              
2762             ENDUSAGE
2763              
2764             exit 2;
2765             }
2766              
2767             sub strip
2768             {
2769             my $self = do { local(@ARGV,$/)=($0); <> };
2770             my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
2771             $copy =~ s/^(?=\S+)/ /gms;
2772             $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
2773             $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
2774             if (\@ARGV && \$ARGV[0] eq '--unstrip') {
2775             eval { require Devel::PPPort };
2776             \$@ and die "Cannot require Devel::PPPort, please install.\\n";
2777             if (eval \$Devel::PPPort::VERSION < $VERSION) {
2778             die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
2779             . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
2780             . "Please install a newer version, or --unstrip will not work.\\n";
2781             }
2782             Devel::PPPort::WriteFile(\$0);
2783             exit 0;
2784             }
2785             print <
2786              
2787             Sorry, but this is a stripped version of \$0.
2788              
2789             To be able to use its original script and doc functionality,
2790             please try to regenerate this file using:
2791              
2792             \$^X \$0 --unstrip
2793              
2794             END
2795             /ms;
2796             my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
2797             $c =~ s{
2798             / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
2799             | ( "[^"\\]*(?:\\.[^"\\]*)*"
2800             | '[^'\\]*(?:\\.[^'\\]*)*' )
2801             | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
2802             $c =~ s!\s+$!!mg;
2803             $c =~ s!^$LF!!mg;
2804             $c =~ s!^\s*#\s*!#!mg;
2805             $c =~ s!^\s+!!mg;
2806              
2807             open OUT, ">$0" or die "cannot strip $0: $!\n";
2808             print OUT "$pl$c\n";
2809              
2810             exit 0;
2811             }
2812              
2813             __DATA__