This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate changes#6240,6242..6246,6248,6249 from cfgperl
authorGurusamy Sarathy <gsar@cpan.org>
Mon, 20 Nov 2000 10:48:34 +0000 (10:48 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Mon, 20 Nov 2000 10:48:34 +0000 (10:48 +0000)
       Subject: [ID 20000626.007] h2xs man page contains trailing garbage
       From: Nicholas Clark <nick@Bagpuss.unfortu.net>
       Date: Mon, 26 Jun 2000 18:40:14 +0100
       Message-Id: <200006261740.SAA02740@Bagpuss.unfortu.net>

       Subject: [PATCH] bytes<->utf8 fixes
       From: simon@brecon.co.uk (Simon Cozens)
       Date: 26 Jun 2000 04:55:45 GMT
       Message-ID: <slrn8ldoih.fbd.simon@justanother.perlhacker.org>

       Subject: [PATCH] is_utf8_string
       From: simon@brecon.co.uk (Simon Cozens)
       Date: 26 Jun 2000 02:25:59 GMT
       Message-ID: <slrn8ldfpn.h5k.simon@justanother.perlhacker.org>

       Subject: [PATCH] avoid mg_ptr in '*' magic
       From: Doug MacEachern <dougm@covalent.net>
       Date: Sun, 25 Jun 2000 11:16:08 -0700 (PDT)
       Message-ID: <Pine.LNX.4.10.10006251045190.461-100000@mojo.covalent.net>

       Subject: [ID 20000624.001] PERL_DL_DEBUG=1 DynaLoader message appears to be wrong
       From: Nicholas Clark <nick@Bagpuss.unfortu.net>
       Date: Sat, 24 Jun 2000 13:06:20 +0100
       Message-Id: <200006241206.NAA03771@Bagpuss.unfortu.net>

       Allow for standalone testing.

       Subject: DOC PATCH 5.6.0: perlfunc/sprintf does not contain an example
       From: Mark-Jason Dominus <mjd@plover.com>
       Date: Tue, 27 Jun 2000 22:36:42 -0400
       Message-ID: <20000628023642.12166.qmail@plover.com>

       Subject: Re: [PATCH 5.6.0 IPC/Open3.pm] Allow the use of numeric fd's
       From: Frank Tobin <ftobin@uiuc.edu>
       Date: Sun, 25 Jun 2000 19:00:58 -0500 (CDT)
       Message-ID: <Pine.BSF.4.21.0006251855340.20487-100000@srh0902.urh.uiuc.edu>

p4raw-link: @6249 on //depot/cfgperl: cab27d238e930b8cddb5b1fb3260355f913b86a6
p4raw-link: @6248 on //depot/cfgperl: fd9170040aeb30a1e02c294dc28a668d19088614
p4raw-link: @6246 on //depot/cfgperl: 7430719f031b4846555bbb9c16b1fd88cd338777
p4raw-link: @6242 on //depot/cfgperl: 1e72252ad7b8e23d1a1142285b8aa82986bd2491
p4raw-link: @6240 on //depot/cfgperl: 514e70b26394e6b272960ab8b9b8b7dbb1e2c068

p4raw-id: //depot/maint-5.6/perl@7766
p4raw-integrated: from //depot/cfgperl@7765 'copy in'
ext/DynaLoader/DynaLoader_pm.PL (@5953..) t/lib/peek.t
(@6086..) t/lib/filefunc.t t/lib/filespec.t (@6230..)
pod/perlintern.pod (@6237..) 'edit in' utf8.c (@6242..)
p4raw-integrated: from //depot/cfgperl@6249 'copy in' lib/IPC/Open3.pm
(@5937..)
p4raw-integrated: from //depot/cfgperl@6248 'copy in' pod/perlfunc.pod
(@6206..)
p4raw-integrated: from //depot/cfgperl@6244 'copy in' sv.c (@6196..)
gv.c (@6217..)
p4raw-integrated: from //depot/cfgperl@6243 'copy in' embed.h
global.sym objXSUB.h pp_proto.h (@6237..) 'edit in' embed.pl
perlapi.c pod/perlapi.pod proto.h (@6242..) 'ignore' embedvar.h
perlapi.h (@6237..)
p4raw-integrated: from //depot/cfgperl@6240 'copy in' utils/h2xs.PL
(@6192..)

15 files changed:
embed.h
embed.pl
ext/DynaLoader/DynaLoader_pm.PL
global.sym
gv.c
lib/IPC/Open3.pm
objXSUB.h
perlapi.c
pod/perlapi.pod
pod/perlfunc.pod
proto.h
sv.c
t/lib/peek.t
utf8.c
utils/h2xs.PL

diff --git a/embed.h b/embed.h
index 4c95dc2..fa199fb 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define to_uni_title_lc                Perl_to_uni_title_lc
 #define to_uni_lower_lc                Perl_to_uni_lower_lc
 #define is_utf8_char           Perl_is_utf8_char
+#define is_utf8_string         Perl_is_utf8_string
 #define is_utf8_alnum          Perl_is_utf8_alnum
 #define is_utf8_alnumc         Perl_is_utf8_alnumc
 #define is_utf8_idfirst                Perl_is_utf8_idfirst
 #define to_uni_title_lc(a)     Perl_to_uni_title_lc(aTHX_ a)
 #define to_uni_lower_lc(a)     Perl_to_uni_lower_lc(aTHX_ a)
 #define is_utf8_char(a)                Perl_is_utf8_char(aTHX_ a)
+#define is_utf8_string(a,b)    Perl_is_utf8_string(aTHX_ a,b)
 #define is_utf8_alnum(a)       Perl_is_utf8_alnum(aTHX_ a)
 #define is_utf8_alnumc(a)      Perl_is_utf8_alnumc(aTHX_ a)
 #define is_utf8_idfirst(a)     Perl_is_utf8_idfirst(aTHX_ a)
 #define to_uni_lower_lc                Perl_to_uni_lower_lc
 #define Perl_is_utf8_char      CPerlObj::Perl_is_utf8_char
 #define is_utf8_char           Perl_is_utf8_char
+#define Perl_is_utf8_string    CPerlObj::Perl_is_utf8_string
+#define is_utf8_string         Perl_is_utf8_string
 #define Perl_is_utf8_alnum     CPerlObj::Perl_is_utf8_alnum
 #define is_utf8_alnum          Perl_is_utf8_alnum
 #define Perl_is_utf8_alnumc    CPerlObj::Perl_is_utf8_alnumc
index 419ae4e..96603be 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1620,6 +1620,7 @@ Ap        |U32    |to_uni_upper_lc|U32 c
 Ap     |U32    |to_uni_title_lc|U32 c
 Ap     |U32    |to_uni_lower_lc|U32 c
 Ap     |int    |is_utf8_char   |U8 *p
+Ap     |bool   |is_utf8_string |U8 *s|STRLEN len
 Ap     |bool   |is_utf8_alnum  |U8 *p
 Ap     |bool   |is_utf8_alnumc |U8 *p
 Ap     |bool   |is_utf8_idfirst|U8 *p
@@ -2063,7 +2064,7 @@ Ap        |U8*    |utf16_to_utf8_reversed|U16* p|U8 *d|I32 bytelen
 Ap     |I32    |utf8_distance  |U8 *a|U8 *b
 Ap     |U8*    |utf8_hop       |U8 *s|I32 off
 Ap     |U8*    |utf8_to_bytes  |U8 *s|STRLEN len
-Ap     |U8*    |bytes_to_utf8  |U8 *s|STRLEN len
+Ap     |U8*    |bytes_to_utf8  |U8 *s|STRLEN *len
 Ap     |UV     |utf8_to_uv     |U8 *s|I32* retlen
 Ap     |U8*    |uv_to_utf8     |U8 *d|UV uv
 p      |void   |vivify_defelem |SV* sv
index 55b8eca..b7b45d8 100644 (file)
@@ -21,7 +21,7 @@ package DynaLoader;
 #   feast like to keep their secret; for wonder makes the words of
 #   praise louder.'
 
-#   (Quote from Tolkien sugested by Anno Siegel.)
+#   (Quote from Tolkien suggested by Anno Siegel.)
 #
 # See pod text at end of file for documentation.
 # See also ext/DynaLoader/README in source tree for other information.
@@ -170,8 +170,8 @@ sub bootstrap {
 
     print STDERR "DynaLoader::bootstrap for $module ",
                ($Is_MacOS
-                      ? "(auto/$modpname/$modfname.$dl_dlext)\n" :
-                       "(:auto:$modpname:$modfname.$dl_dlext)\n")
+                      ? "(:auto:$modpname:$modfname.$dl_dlext)\n" :
+                      "(auto/$modpname/$modfname.$dl_dlext)\n")
        if $dl_debug;
 
     foreach (@INC) {
index 8a9b008..1f03877 100644 (file)
@@ -185,6 +185,7 @@ Perl_to_uni_upper_lc
 Perl_to_uni_title_lc
 Perl_to_uni_lower_lc
 Perl_is_utf8_char
+Perl_is_utf8_string
 Perl_is_utf8_alnum
 Perl_is_utf8_alnumc
 Perl_is_utf8_idfirst
diff --git a/gv.c b/gv.c
index 1c3a953..e24fc45 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -106,7 +106,7 @@ Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
     GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
     GvCVGEN(gv) = 0;
     GvEGV(gv) = gv;
-    sv_magic((SV*)gv, (SV*)gv, '*', name, len);
+    sv_magic((SV*)gv, (SV*)gv, '*', Nullch, 0);
     GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
     GvNAME(gv) = savepvn(name, len);
     GvNAMELEN(gv) = len;
index 46ebd68..6d91c81 100644 (file)
@@ -84,6 +84,7 @@ The order of arguments differs from that of open2().
 # fixed for 5.001 by Ulrich Kunitz <kunitz@mai-koeln.com>
 # ported to Win32 by Ron Schmidt, Merrill Lynch almost ended my career
 # fixed for autovivving FHs, tchrist again
+# allow fd numbers to be used, by Frank Tobin
 #
 # $Id: open3.pl,v 1.1 1993/11/23 06:26:15 marc Exp $
 #
@@ -136,6 +137,16 @@ sub xclose {
     close $_[0] or croak "$Me: close($_[0]) failed: $!";
 }
 
+sub xfileno {
+    my ($fh) = @_;
+    return $1 if $fh =~ /^=?(\d+)$/;  # deal with $fh just being an fd
+    return fileno $fh;
+}
+
+sub fh_is_fd {
+    return $_[0] =~ /^=?\d+$/;
+}
+
 my $do_spawn = $^O eq 'os2' || $^O eq 'MSWin32';
 
 sub _open3 {
@@ -164,9 +175,9 @@ sub _open3 {
     $dup_err = ($dad_err =~ s/^[<>]&//);
 
     # force unqualified filehandles into caller's package
-    $dad_wtr = qualify $dad_wtr, $package;
-    $dad_rdr = qualify $dad_rdr, $package;
-    $dad_err = qualify $dad_err, $package;
+    $dad_wtr = qualify $dad_wtr, $package unless fh_is_fd($dad_wtr);
+    $dad_rdr = qualify $dad_rdr, $package unless fh_is_fd($dad_rdr);
+    $dad_err = qualify $dad_err, $package unless fh_is_fd($dad_err);
 
     my $kid_rdr = gensym;
     my $kid_wtr = gensym;
@@ -181,20 +192,20 @@ sub _open3 {
        # If she wants to dup the kid's stderr onto her stdout I need to
        # save a copy of her stdout before I put something else there.
        if ($dad_rdr ne $dad_err && $dup_err
-               && fileno($dad_err) == fileno(STDOUT)) {
+               && xfileno($dad_err) == fileno(STDOUT)) {
            my $tmp = gensym;
            xopen($tmp, ">&$dad_err");
            $dad_err = $tmp;
        }
 
        if ($dup_wtr) {
-           xopen \*STDIN,  "<&$dad_wtr" if fileno(STDIN) != fileno($dad_wtr);
+           xopen \*STDIN,  "<&$dad_wtr" if fileno(STDIN) != xfileno($dad_wtr);
        } else {
            xclose $dad_wtr;
            xopen \*STDIN,  "<&=" . fileno $kid_rdr;
        }
        if ($dup_rdr) {
-           xopen \*STDOUT, ">&$dad_rdr" if fileno(STDOUT) != fileno($dad_rdr);
+           xopen \*STDOUT, ">&$dad_rdr" if fileno(STDOUT) != xfileno($dad_rdr);
        } else {
            xclose $dad_rdr;
            xopen \*STDOUT, ">&=" . fileno $kid_wtr;
@@ -204,8 +215,8 @@ sub _open3 {
                # I have to use a fileno here because in this one case
                # I'm doing a dup but the filehandle might be a reference
                # (from the special case above).
-               xopen \*STDERR, ">&" . fileno $dad_err
-                   if fileno(STDERR) != fileno($dad_err);
+               xopen \*STDERR, ">&" . xfileno($dad_err)
+                   if fileno(STDERR) != xfileno($dad_err);
            } else {
                xclose $dad_err;
                xopen \*STDERR, ">&=" . fileno $kid_err;
index ad5aa09..e30258b 100644 (file)
--- a/objXSUB.h
+++ b/objXSUB.h
 #define Perl_is_utf8_char      pPerl->Perl_is_utf8_char
 #undef  is_utf8_char
 #define is_utf8_char           Perl_is_utf8_char
+#undef  Perl_is_utf8_string
+#define Perl_is_utf8_string    pPerl->Perl_is_utf8_string
+#undef  is_utf8_string
+#define is_utf8_string         Perl_is_utf8_string
 #undef  Perl_is_utf8_alnum
 #define Perl_is_utf8_alnum     pPerl->Perl_is_utf8_alnum
 #undef  is_utf8_alnum
index d7599d7..f4111e2 100644 (file)
--- a/perlapi.c
+++ b/perlapi.c
@@ -1326,6 +1326,13 @@ Perl_is_utf8_char(pTHXo_ U8 *p)
     return ((CPerlObj*)pPerl)->Perl_is_utf8_char(p);
 }
 
+#undef  Perl_is_utf8_string
+bool
+Perl_is_utf8_string(pTHXo_ U8 *s, STRLEN len)
+{
+    return ((CPerlObj*)pPerl)->Perl_is_utf8_string(s, len);
+}
+
 #undef  Perl_is_utf8_alnum
 bool
 Perl_is_utf8_alnum(pTHXo_ U8 *p)
@@ -3352,7 +3359,7 @@ Perl_utf8_to_bytes(pTHXo_ U8 *s, STRLEN len)
 
 #undef  Perl_bytes_to_utf8
 U8*
-Perl_bytes_to_utf8(pTHXo_ U8 *s, STRLEN len)
+Perl_bytes_to_utf8(pTHXo_ U8 *s, STRLEN *len)
 {
     return ((CPerlObj*)pPerl)->Perl_bytes_to_utf8(s, len);
 }
index d613115..2896951 100644 (file)
@@ -153,9 +153,10 @@ Found in file av.c
 =item bytes_to_utf8
 
 Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
-Returns a pointer to the newly-created string.
+Returns a pointer to the newly-created string, and sets C<len> to
+reflect the new length.
 
-       U8 *    bytes_to_utf8(U8 *s, STRLEN len)
+       U8 *    bytes_to_utf8(U8 *s, STRLEN *len)
 
 =for hackers
 Found in file utf8.c
@@ -2268,19 +2269,19 @@ false, defined or undefined.  Does not handle 'get' magic.
 =for hackers
 Found in file sv.h
 
-=item svtype
+=item SvTYPE
 
-An enum of flags for Perl types.  These are found in the file B<sv.h> 
-in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
+Returns the type of the SV.  See C<svtype>.
+
+       svtype  SvTYPE(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvTYPE
-
-Returns the type of the SV.  See C<svtype>.
+=item svtype
 
-       svtype  SvTYPE(SV* sv)
+An enum of flags for Perl types.  These are found in the file B<sv.h> 
+in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 
 =for hackers
 Found in file sv.h
@@ -2913,10 +2914,21 @@ Converts the specified character to uppercase.
 =for hackers
 Found in file handy.h
 
+=item U8 *s
+
+Returns true if first C<len> bytes of the given string form valid a UTF8
+string, false otherwise.
+
+       bool_utf8_string        U8 *s(STRLEN len)
+
+=for hackers
+Found in file utf8.c
+
 =item utf8_to_bytes
 
 Converts a string C<s> of length C<len> from UTF8 into ASCII encoding.
 Unlike C<bytes_to_utf8>, this over-writes the original string.
+Returns zero on failure after converting as much as possible.
 
        U8 *    utf8_to_bytes(U8 *s, STRLEN len)
 
index ce08134..6b4e971 100644 (file)
@@ -4379,9 +4379,18 @@ L</chomp>, and L</join>.)
 
 =item sprintf FORMAT, LIST
 
-Returns a string formatted by the usual C<printf> conventions of the
-C library function C<sprintf>.  See L<sprintf(3)> or L<printf(3)>
-on your system for an explanation of the general principles.
+Returns a string formatted by the usual C<printf> conventions of the C
+library function C<sprintf>.  See below for more details
+and see L<sprintf(3)> or L<printf(3)> on your system for an explanation of
+the general principles.
+
+For example:
+
+        # Format number with up to 8 leading zeroes
+        $result = sprintf("%08d", $number);
+
+        # Round number to 3 digits after decimal point
+        $rounded = sprintf("%.3f", $number);
 
 Perl does its own C<sprintf> formatting--it emulates the C
 function C<sprintf>, but it doesn't use it (except for floating-point
diff --git a/proto.h b/proto.h
index 2171aa1..fc34840 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -367,6 +367,7 @@ PERL_CALLCONV U32   Perl_to_uni_upper_lc(pTHX_ U32 c);
 PERL_CALLCONV U32      Perl_to_uni_title_lc(pTHX_ U32 c);
 PERL_CALLCONV U32      Perl_to_uni_lower_lc(pTHX_ U32 c);
 PERL_CALLCONV int      Perl_is_utf8_char(pTHX_ U8 *p);
+PERL_CALLCONV bool     Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len);
 PERL_CALLCONV bool     Perl_is_utf8_alnum(pTHX_ U8 *p);
 PERL_CALLCONV bool     Perl_is_utf8_alnumc(pTHX_ U8 *p);
 PERL_CALLCONV bool     Perl_is_utf8_idfirst(pTHX_ U8 *p);
@@ -810,7 +811,7 @@ PERL_CALLCONV U8*   Perl_utf16_to_utf8_reversed(pTHX_ U16* p, U8 *d, I32 bytelen);
 PERL_CALLCONV I32      Perl_utf8_distance(pTHX_ U8 *a, U8 *b);
 PERL_CALLCONV U8*      Perl_utf8_hop(pTHX_ U8 *s, I32 off);
 PERL_CALLCONV U8*      Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN len);
-PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ U8 *s, STRLEN len);
+PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ U8 *s, STRLEN *len);
 PERL_CALLCONV UV       Perl_utf8_to_uv(pTHX_ U8 *s, I32* retlen);
 PERL_CALLCONV U8*      Perl_uv_to_utf8(pTHX_ U8 *d, UV uv);
 PERL_CALLCONV void     Perl_vivify_defelem(pTHX_ SV* sv);
diff --git a/sv.c b/sv.c
index 3254cfb..a9303d0 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2561,7 +2561,7 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
                char *name = GvNAME(sstr);
                STRLEN len = GvNAMELEN(sstr);
                sv_upgrade(dstr, SVt_PVGV);
-               sv_magic(dstr, dstr, '*', name, len);
+               sv_magic(dstr, dstr, '*', Nullch, 0);
                GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
                GvNAME(dstr) = savepvn(name, len);
                GvNAMELEN(dstr) = len;
index 255512f..86fd74a 100644 (file)
@@ -285,8 +285,6 @@ do_test(17,
     MG_VIRTUAL = &PL_vtbl_glob
     MG_TYPE = \'\\*\'
     MG_OBJ = $ADDR
-    MG_LEN = 1
-    MG_PTR = $ADDR "a"
   NAME = "a"
   NAMELEN = 1
   GvSTASH = $ADDR\\t"main"
diff --git a/utf8.c b/utf8.c
index 3104fb9..6af52ab 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -134,6 +134,30 @@ Perl_is_utf8_char(pTHX_ U8 *s)
     return len;
 }
 
+/*
+=for apidoc Am|bool_utf8_string|U8 *s|STRLEN len
+
+Returns true if first C<len> bytes of the given string form valid a UTF8
+string, false otherwise.
+
+=cut
+*/
+
+bool 
+Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len)
+{
+    U8* x=s;
+    U8* send=s+len;
+    int c;
+    while (x < send) {
+        c = is_utf8_char(x);
+        x += c;
+        if (!c || x > send)
+            return 0;
+    }
+    return 1;
+}
+
 UV
 Perl_utf8_to_uv(pTHX_ U8* s, I32* retlen)
 {
@@ -227,6 +251,7 @@ Perl_utf8_hop(pTHX_ U8 *s, I32 off)
 
 Converts a string C<s> of length C<len> from UTF8 into ASCII encoding.
 Unlike C<bytes_to_utf8>, this over-writes the original string.
+Returns zero on failure after converting as much as possible.
 
 =cut
 */
@@ -247,6 +272,10 @@ Perl_utf8_to_bytes(pTHX_ U8* s, STRLEN len)
         else {
             I32 ulen;
             UV uv = utf8_to_uv(s, &ulen);
+            if (uv > 255) {
+                *d = '\0';
+                return 0;
+            }
             s += ulen;
             *d++ = (U8)uv;
         }
@@ -256,24 +285,25 @@ Perl_utf8_to_bytes(pTHX_ U8* s, STRLEN len)
 }
 
 /*
-=for apidoc Am|U8 *|bytes_to_utf8|U8 *s|STRLEN len
+=for apidoc Am|U8 *|bytes_to_utf8|U8 *s|STRLEN *len
 
 Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
-Returns a pointer to the newly-created string.
+Returns a pointer to the newly-created string, and sets C<len> to
+reflect the new length.
 
 =cut
 */
 
 U8*
-Perl_bytes_to_utf8(pTHX_ U8* s, STRLEN len)
+Perl_bytes_to_utf8(pTHX_ U8* s, STRLEN *len)
 {
     dTHR;
     U8 *send;
     U8 *d;
     U8 *dst;
-    send = s + len;
+    send = s + (*len);
 
-    Newz(801, d, len * 2 + 1, U8);
+    Newz(801, d, (*len) * 2 + 1, U8);
     dst = d;
 
     while (s < send) {
@@ -286,6 +316,7 @@ Perl_bytes_to_utf8(pTHX_ U8* s, STRLEN len)
         }
     }
     *d = '\0';
+    *len = d-dst;
     return dst;
 }
 
index 8ebe8b3..84c6923 100644 (file)
@@ -834,48 +834,48 @@ my $email = 'a.u.thor@a.galaxy.far.far.away';
 
 my $revhist = '';
 $revhist = <<EOT if $opt_C;
-
-=head1 HISTORY
-
-=over 8
-
-=item $TEMPLATE_VERSION
-
-Original version; created by h2xs $H2XS_VERSION with options
-
-  @ARGS
-
-=back
-
+#
+#=head1 HISTORY
+#
+#=over 8
+#
+#=item $TEMPLATE_VERSION
+#
+#Original version; created by h2xs $H2XS_VERSION with options
+#
+#  @ARGS
+#
+#=back
+#
 EOT
 
 my $exp_doc = <<EOD;
-
-=head2 EXPORT
-
-None by default.
-
+#
+#=head2 EXPORT
+#
+#None by default.
+#
 EOD
 if (@const_names and not $opt_P) {
   $exp_doc .= <<EOD;
-=head2 Exportable constants
-
-  @{[join "\n  ", @const_names]}
-
+#=head2 Exportable constants
+#
+#  @{[join "\n  ", @const_names]}
+#
 EOD
 }
 if (defined $fdecls and @$fdecls and not $opt_P) {
   $exp_doc .= <<EOD;
-=head2 Exportable functions
-
+#=head2 Exportable functions
+#
 EOD
-  $exp_doc .= <<EOD if $opt_p;
-When accessing these functions from Perl, prefix C<$opt_p> should be removed.
-
+#  $exp_doc .= <<EOD if $opt_p;
+#When accessing these functions from Perl, prefix C<$opt_p> should be removed.
+#
 EOD
   $exp_doc .= <<EOD;
-  @{[join "\n  ", @known_fnames{@fnames}]}
-
+#  @{[join "\n  ", @known_fnames{@fnames}]}
+#
 EOD
 }
 
@@ -898,7 +898,7 @@ my $pod = <<"END" unless $opt_P;
 #unedited.
 #
 #Blah blah blah.
-#$exp_doc$revhist
+$exp_doc$revhist
 #=head1 AUTHOR
 #
 #$author, $email