This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge commit 'origin/blead' into blead
authorSteve Hay <SteveHay@planit.com>
Sat, 7 Nov 2009 15:03:56 +0000 (15:03 +0000)
committerSteve Hay <SteveHay@planit.com>
Sat, 7 Nov 2009 15:03:56 +0000 (15:03 +0000)
142 files changed:
Configure
Cross/Makefile-cross-SH
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
INSTALL
MANIFEST
Makefile.SH
NetWare/Makefile
NetWare/config.wc
Porting/Glossary
Porting/Maintainers.pl
Porting/config.sh
av.c
config_h.SH
configure.com
cop.h
cpan/CPANPLUS-Dist-Build/lib/CPANPLUS/Dist/Build.pm
cpan/CPANPLUS-Dist-Build/lib/CPANPLUS/Dist/Build/Constants.pm
cpan/CPANPLUS/lib/CPANPLUS.pm
cpan/CPANPLUS/lib/CPANPLUS/Dist.pm
cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm
cpan/CPANPLUS/lib/CPANPLUS/Internals.pm
cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm
cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm
cpan/ExtUtils-CBuilder/Changes
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm [new file with mode: 0644]
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm [new file with mode: 0644]
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm [new file with mode: 0644]
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm
cpan/ExtUtils-CBuilder/t/00-have-compiler.t
cpan/ExtUtils-CBuilder/t/02-link.t
cpan/ExtUtils-CBuilder/t/03-cplusplus.t [new file with mode: 0644]
cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm
cpan/Module-Load-Conditional/t/to_load/Commented.pm
cpan/Module-Load-Conditional/t/to_load/LoadIt.pm
cpan/Module-Load-Conditional/t/to_load/MustBe/Loaded.pm
cpan/Pod-Simple/t/corpus/2202jp.txt
cpan/Pod-Simple/t/corpus/2202jpx.txt
cpan/Pod-Simple/t/corpus/2202jpy.txt
cpan/Pod-Simple/t/corpus/2202jpz.txt
cpan/Pod-Simple/t/corpus/cp1256.txt
cpan/Pod-Simple/t/corpus/fet_cont.txt
cpan/Pod-Simple/t/corpus/fet_dup.txt
cpan/Pod-Simple/t/corpus/iso6.txt
cpan/Pod-Simple/t/corpus/koi8r.txt
cpan/Pod-Simple/t/corpus/laozi38.txt
cpan/Pod-Simple/t/corpus/laozi38b.txt
cpan/Pod-Simple/t/corpus/laozi38p.pod
cpan/Pod-Simple/t/corpus/lat1fr.txt
cpan/Pod-Simple/t/corpus/lat1frim.txt
cpan/Pod-Simple/t/corpus/nonesuch.txt
cpan/Pod-Simple/t/corpus/pasternak_cp1251.txt
cpan/Pod-Simple/t/corpus/plain.txt
cpan/Pod-Simple/t/corpus/plain_explicit.txt
cpan/Pod-Simple/t/corpus/plain_latin1.txt
cpan/Pod-Simple/t/corpus/plain_utf8.txt
cpan/Pod-Simple/t/corpus/polish_utf8.txt
cpan/Pod-Simple/t/corpus/s2763_sjis.txt
cpan/Pod-Simple/t/corpus/thai_iso11.txt
cpan/Pod-Simple/t/corpus2/polish_utf8_bom.txt
cpan/Pod-Simple/t/corpus2/polish_utf8_bom2.txt
dist/B-Deparse/t/deparse.t
djgpp/config.over
doop.c
embed.fnc
embed.h
embedvar.h
epoc/config.sh
ext/XS-APItest-KeywordRPN/KeywordRPN.pm [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/KeywordRPN.xs [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/Makefile.PL [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/README [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/t/keyword_plugin.t [new file with mode: 0644]
ext/XS-APItest/APItest.pm
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/pmflag.t [new file with mode: 0644]
global.sym
globvar.sym
gv.c
lib/Carp.pm
lib/Carp.t
lib/legacy.pm [new file with mode: 0755]
lib/overload.pm
lib/overload.t
lib/overload/numbers.pm
mathoms.c
op.c
overload.c
overload.h
overload.pl
perl.c
perl.h
perlapi.h
perlvars.h
perly.act
perly.h
perly.tab
perly.y
plan9/config_sh.sample
pod/perl5112delta.pod
pod/perlcommunity.pod
pod/perldiag.pod
pod/perlfunc.pod
pod/perlhack.pod
pod/perlre.pod
pod/perlsyn.pod
pp.c
pp.h
pp_ctl.c
pp_sys.c
proto.h
sv.c
symbian/config.sh
symbian/install.cfg
t/comp/parser.t
t/comp/utf.t
t/lib/warnings/toke
t/op/list.t
t/op/smartmatch.t
t/op/split.t
t/op/sysio.t
t/op/tie.t
t/porting/diag.t
t/re/pat_rt_report.t
toke.c
uconfig.sh
util.c
utils/perlivp.PL
win32/config.bc
win32/config.ce
win32/config.gc
win32/config.vc
win32/config.vc64

index a4c3397..e67b461 100755 (executable)
--- a/Configure
+++ b/Configure
 # The dist package (which contains metaconfig) is available via SVN:
 #     svn co https://svn.sourceforge.net/svnroot/dist/trunk/dist
 #
+# Though this script was generated by metaconfig from metaunits, it is
+# OK to send patches against Configure itself. It's up to the Configure
+# pumpkin to backport the patch to the metaunits if it is accepted.
+# For more information on patching Configure, see pod/perlhack.pod
+#
+# The metaunits are also available from the public git repository:
+#     http://perl5.git.perl.org/metaconfig.git/ or
+#     $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
 #
-# Though this script was generated by metaconfig, it is OK to send
-# patches against it. It's up to the Configure pumpkin to backport
-# the patch to the metaunits if it is accepted.
 # See Porting/pumpkin.pod for more information on metaconfig.
 #
 
 # $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $
 #
-# Generated on Mon Oct 19 16:23:09 CEST 2009 [metaconfig 3.5 PL0]
+# Generated on Fri Nov  6 07:43:05 CET 2009 [metaconfig 3.5 PL0]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -348,6 +353,8 @@ optimize=''
 cf_email=''
 cf_by=''
 cf_time=''
+charbits=''
+charsize=''
 contains=''
 cpp_stuff=''
 cpplast=''
@@ -18816,6 +18823,86 @@ esac
 : set the base revision
 baserev=5.0
 
+: check for length of character
+echo " "
+case "$charsize" in
+'')
+       echo "Checking to see how big your characters are (hey, you never know)..." >&4
+       $cat >try.c <<EOCP
+#include <stdio.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main()
+{
+    printf("%d\n", (int)sizeof(char));
+    exit(0);
+}
+EOCP
+       set try
+       if eval $compile_ok; then
+               dflt=`$run ./try`
+       else
+               dflt='1'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+       fi
+       ;;
+*)
+       dflt="$charsize"
+       ;;
+esac
+rp="What is the size of a character (in bytes)?"
+. ./myread
+charsize="$ans"
+$rm_try
+
+: Check for the number of bits in a character
+case "$charbits" in
+'')    echo "Checking how long a character is (in bits)..." >&4
+       $cat >try.c <<EOCP
+#include <stdio.h>
+int main ()
+{
+    int n;
+    unsigned char c;
+    for (c = 1, n = 0; c; c <<= 1, n++) ;
+    printf ("%d\n", n);
+    return (0);
+    }
+EOCP
+       set try
+       if eval $compile_ok; then
+               dflt=`$run ./try`
+       else
+               dflt='8'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+       fi
+       ;;
+*)
+       dflt="$charbits"
+       ;;
+esac
+rp="What is the length of a character (in bits)?"
+. ./myread
+charbits="$ans"
+$rm_try
+case "$charbits" in
+8)     ;;
+*)     cat >&4 << EOM
+Your system has an unsigned character size of $charbits bits, which
+is rather unusual (normally it is 8 bits).  Perl likely will not work
+correctly on your system, with subtle bugs in various places.
+EOM
+       rp='Do you really want to continue?'
+       dflt='n'
+       . ./myread
+       case "$ans" in
+               [yY])   echo >&4 "Okay, continuing."    ;;
+               *)      exit 1                          ;;
+       esac
+esac
+
 : how do we concatenate cpp tokens here?
 echo " "
 echo "Checking to see how your cpp does stuff like concatenate tokens..." >&4
@@ -21389,7 +21476,7 @@ case "$osname::$gccversion" in
     tHdrH=_tmpHdr
     rm -f $tHdrH'.h' $tHdrH
     touch $tHdrH'.h'
-    if cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then
+    if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then
        sed 's/#define[\ \  ]*//;s/[\ \     ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real'
        if [ -s $tHdrH'_cppsym.real' ]; then
          cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true
@@ -21836,6 +21923,13 @@ for xxx in $known_extensions ; do
                $define) avail_ext="$avail_ext $xxx" ;;
                esac
                ;;
+       XS/APItest/KeywordRPN|xs/apitest/keywordrpn)
+               # This is just for testing.  Skip it unless we have dynamic loading.
+
+               case "$usedl" in
+               $define) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
        XS/Typemap|xs/typemap)
                # This is just for testing.  Skip it unless we have dynamic loading.
                case "$usedl" in
@@ -22203,6 +22297,8 @@ ccversion='$ccversion'
 cf_by='$cf_by'
 cf_email='$cf_email'
 cf_time='$cf_time'
+charbits='$charbits'
+charsize='$charsize'
 chgrp='$chgrp'
 chmod='$chmod'
 chown='$chown'
index 1dc91a3..73d4454 100755 (executable)
@@ -822,7 +822,7 @@ install.html: all installhtml
       --splithead=pod/perlipc     \
       --splititem=pod/perlfunc    \
       --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
-      --ignore=Porting/Maintainers.pm,Porting/patching.pod,Porting/pumpkin.pod,Porting/repository.pod \
+      --ignore=Porting/Maintainers.pm,Porting/pumpkin.pod,Porting/repository.pod \
       --verbose
 
 
index 4a903a2..9c9c396 100644 (file)
@@ -64,6 +64,7 @@ ccversion=''
 cf_by='red'
 cf_email='red@criticalintegration.com'
 cf_time='Wed Sep  3 22:24:58 EDT 2003'
+charbits='8'
 chgrp=''
 chmod='chmod'
 chown=''
@@ -546,7 +547,7 @@ doublesize='8'
 drand01='drand48()'
 drand48_r_proto='0'
 dtrace=''
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared'
+dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared'
 eagain='EAGAIN'
 ebcdic='undef'
 echo='echo'
@@ -561,7 +562,7 @@ endservent_r_proto='0'
 eunicefix=':'
 exe_ext=''
 expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared Errno'
+extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared Errno'
 extras=''
 fflushNULL='define'
 fflushall='undef'
@@ -751,7 +752,7 @@ issymlink='/usr/bin/test -h'
 ivdformat='"ld"'
 ivsize='4'
 ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared'
+known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared'
 ksh=''
 ld='cc'
 lddlflags='-shared -L/usr/local/lib'
index 3e5ebdd..d65aaba 100644 (file)
@@ -531,7 +531,7 @@ dlsrc='dl_dlopen.xs'
 doublesize='8'
 drand01='drand48()'
 drand48_r_proto='0'
-dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared'
+dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared'
 eagain='EAGAIN'
 ebcdic='undef'
 echo='echo'
@@ -546,7 +546,7 @@ endservent_r_proto='0'
 eunicefix=':'
 exe_ext=''
 expr='expr'
-extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared Errno'
+extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared Errno'
 extras=''
 fflushNULL='define'
 fflushall='undef'
@@ -736,7 +736,7 @@ issymlink='/usr/bin/test -h'
 ivdformat='"ld"'
 ivsize='4'
 ivtype='long'
-known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attributes re threads threads/shared'
+known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap attributes re threads threads/shared'
 ksh=''
 ld='arm-none-linux-gnueabi-gcc'
 lddlflags='-shared -L/usr/local/lib'
diff --git a/INSTALL b/INSTALL
index 9582876..3d95ff8 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1282,7 +1282,7 @@ various other operating systems.
 
 If you plan to port Perl to a new architecture, study carefully the
 section titled "Philosophical Issues in Patching and Porting Perl"
-in the file Porting/pumpkin.pod and the file Porting/patching.pod.
+in the file Porting/pumpkin.pod and the file pod/perlrepository.pod.
 Study also how other non-UNIX ports have solved problems.
 
 =back
index 02c4c49..d0682b4 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -918,11 +918,15 @@ cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm  CBuilder method
 cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm   CBuilder methods for OS/2
 cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm  CBuilder methods for Unix
 cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm   CBuilder methods for VMS
+cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm   CBuilder methods for Windows
+cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm   CBuilder methods for Windows
+cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm  CBuilder methods for Windows
 cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm       CBuilder methods for Windows
 cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm                        Compile and link C code for Perl modules
 cpan/ExtUtils-CBuilder/t/00-have-compiler.t                    ExtUtils::CBuilder tests
 cpan/ExtUtils-CBuilder/t/01-basic.t                            tests for ExtUtils::CBuilder
 cpan/ExtUtils-CBuilder/t/02-link.t                             tests for ExtUtils::CBuilder
+cpan/ExtUtils-CBuilder/t/03-cplusplus.t                                tests for ExtUtils::CBuilder
 cpan/ExtUtils-Command/lib/ExtUtils/Command.pm  Utilities for Make on non-UNIX platforms
 cpan/ExtUtils-Command/t/cp.t                   See if ExtUtils::Command works
 cpan/ExtUtils-Command/t/eu_command.t           See if ExtUtils::Command works
@@ -3194,6 +3198,11 @@ ext/XS-APItest/APItest.xs        XS::APItest extension
 ext/XS-APItest/core.c          Test API functions when PERL_CORE is defined
 ext/XS-APItest/core_or_not.inc Code common to core.c and notcore.c
 ext/XS-APItest/exception.c     XS::APItest extension
+ext/XS-APItest-KeywordRPN/KeywordRPN.pm        XS::APItest::KeywordRPN extension
+ext/XS-APItest-KeywordRPN/KeywordRPN.xs        XS::APItest::KeywordRPN extension
+ext/XS-APItest-KeywordRPN/Makefile.PL  XS::APItest::KeywordRPN extension
+ext/XS-APItest-KeywordRPN/README       XS::APItest::KeywordRPN extension
+ext/XS-APItest-KeywordRPN/t/keyword_plugin.t   test keyword plugin mechanism
 ext/XS-APItest/Makefile.PL     XS::APItest extension
 ext/XS-APItest/MANIFEST                XS::APItest extension
 ext/XS-APItest/notcore.c       Test API functions when PERL_CORE is not defined
@@ -3203,6 +3212,7 @@ ext/XS-APItest/t/exception.t      XS::APItest extension
 ext/XS-APItest/t/hash.t                XS::APItest: tests for hash related APIs
 ext/XS-APItest/t/my_cxt.t      XS::APItest: test MY_CXT interface
 ext/XS-APItest/t/op.t          XS::APItest: tests for OP related APIs
+ext/XS-APItest/t/pmflag.t      Test deprecation warning for Perl_pmflag()
 ext/XS-APItest/t/printf.t      XS::APItest extension
 ext/XS-APItest/t/push.t                XS::APItest extension
 ext/XS-APItest/t/rmagical.t    XS::APItest extension
@@ -3464,6 +3474,7 @@ lib/importenv.pl          Perl routine to get environment into variables
 lib/integer.pm                 For "use integer"
 lib/integer.t                  For "use integer" testing
 lib/Internals.t                        For Internals::* testing
+lib/legacy.pm                  Pragma to preserve legacy behavior
 lib/less.pm                    For "use less"
 lib/less.t                     See if less support works
 lib/locale.pm                  For "use locale"
index e43eeca..9589ada 100644 (file)
@@ -315,6 +315,8 @@ MINIPERL = \$(LDLIBPTH) \$(RUN) ./miniperl\$(EXE_EXT) -Ilib
 PERL_EXE = perl\$(EXE_EXT)
 RUN_PERL = \$(LDLIBPTH) \$(RUN) ./perl\$(EXE_EXT)
 
+# Macros to run our tests
+RUN_TESTS = \$(LDLIBPTH) ./runtests
 
 dynamic_ext = $dynamic_list
 dynamic_ext_re = $dynamic_ext_re
@@ -1062,7 +1064,7 @@ install.html: all installhtml
       --splithead=pod/perlipc     \
       --splititem=pod/perlfunc    \
       --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
-      --ignore=Porting/Maintainers.pm,Porting/patching.pod,Porting/pumpkin.pod,Porting/repository.pod \
+      --ignore=Porting/Maintainers.pm,Porting/pumpkin.pod,Porting/repository.pod \
       --verbose
 
 
@@ -1319,7 +1321,7 @@ makedepend: makedepend.SH config.sh
 
 _test:
        echo >&2 The _test target is deprecated. Please upgrade your smoker
-       PERL=./perl ./runtests choose
+       PERL=./perl $(RUN_TESTS) choose
 
 # Cannot delegate rebuilding of t/perl to make
 # to allow interlaced test and minitest
@@ -1336,19 +1338,19 @@ test_prep_reonly: $(MINIPERL_EXE) $(PERL_EXE) $(dynamic_ext_re) $(TEST_PERL_DLL)
        cd t && (rm -f $(PERL_EXE); $(LNS) ../$(PERL_EXE) $(PERL_EXE))
 
 test check: test_prep
-       ./runtests choose
+       $(RUN_TESTS) choose
 
 test_tty: test_prep
-       ./runtests tty
+       $(RUN_TESTS) tty
 
 test_notty: test_prep
-       ./runtests no-tty
+       $(RUN_TESTS) no-tty
 
 utest ucheck test.utf8 check.utf8: test_prep
-       TEST_ARGS=-utf8 ./runtests choose
+       TEST_ARGS=-utf8 $(RUN_TESTS) choose
 
 coretest: test_prep
-       TEST_ARGS=-core ./runtests choose
+       TEST_ARGS=-core $(RUN_TESTS) choose
 
 test-prep:     test_prep
 
@@ -1359,7 +1361,7 @@ test-notty:       test_notty
 # Torture testing
 
 test.torture torturetest:      test_prep
-       TEST_ARGS=-torture ./runtests choose
+       TEST_ARGS=-torture $(RUN_TESTS) choose
 
 # Targets for UTF16 testing:
 
@@ -1368,23 +1370,23 @@ minitest.utf16: minitest.prep
                && $(RUN_PERL) TEST -minitest -utf16 base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t </dev/tty
 
 test.utf16 check.utf16: test_prep
-       TEST_ARGS=-utf16 ./runtests choose
+       TEST_ARGS=-utf16 $(RUN_TESTS) choose
 
 utest.utf16 ucheck.utf16: test_prep
-       TEST_ARGS="-utf8 -utf16" ./runtests choose
+       TEST_ARGS="-utf8 -utf16" $(RUN_TESTS) choose
 
 # Targets for valgrind testing:
 
 test_prep.valgrind: test_prep perl.valgrind
 
 test.valgrind check.valgrind:  test_prep perl.valgrind.config
-       PERL_VALGRIND=1 VALGRIND='$(VALGRIND)' ./runtests choose
+       PERL_VALGRIND=1 VALGRIND='$(VALGRIND)' $(RUN_TESTS) choose
 
 utest.valgrind ucheck.valgrind: test_prep.valgrind perl.valgrind.config
-       PERL_VALGRIND=1 TEST_ARGS=-utf8 ./runtests choose
+       PERL_VALGRIND=1 TEST_ARGS=-utf8 $(RUN_TESTS) choose
 
 test_notty.valgrind: test_prep.valgrind perl.valgrind.config
-       PERL_VALGRIND=1 ./runtests no-tty
+       PERL_VALGRIND=1 $(RUN_TESTS) no-tty
 
 # Targets for Third Degree testing.
 
@@ -1392,26 +1394,26 @@ test_prep.third: test_prep perl.third
        cd t && (rm -f ./perl.third$(EXE_EXT); $(LNS) ../perl.third$(EXE_EXT) perl.third(EXE_EXT))
 
 test.third check.third:        test_prep.third perl.third
-       PERL=./perl.third PERL_3LOG=1 ./runtests choose
+       PERL=./perl.third PERL_3LOG=1 $(RUN_TESTS) choose
 
 utest.third ucheck.third: test_prep.third perl.third
-       PERL=./perl.third PERL_3LOG=1 TEST_ARGS=-utf8 ./runtests choose
+       PERL=./perl.third PERL_3LOG=1 TEST_ARGS=-utf8 $(RUN_TESTS) choose
 
 test_notty.third: test_prep.third perl.third
-       PERL=./perl.third PERL_3LOG=1 ./runtests choose
+       PERL=./perl.third PERL_3LOG=1 $(RUN_TESTS) choose
 
 # Targets for Deparse testing.
 
 test.deparse:  test_prep
-       TEST_ARGS=-deparse ./runtests choose
+       TEST_ARGS=-deparse $(RUN_TESTS) choose
 
 test_notty.deparse:    test_prep
-       TEST_ARGS=-deparse ./runtests no-tty
+       TEST_ARGS=-deparse $(RUN_TESTS) no-tty
 
 # Targets to run the test suite with -t
 
 test.taintwarn:        test_prep
-       TEST_ARGS=-taintwarn ./runtests choose
+       TEST_ARGS=-taintwarn $(RUN_TESTS) choose
 
 minitest.prep:
        -@test test -f lib/Config.pm || $(MAKE) lib/Config.pm $(unidatafiles)
@@ -1429,13 +1431,13 @@ minitest: $(MINIPERL_EXE) lib/re.pm minitest.prep
 # Test via harness
 
 test_harness: test_prep
-       TESTFILE=harness ./runtests choose
+       TESTFILE=harness $(RUN_TESTS) choose
 
 test_harness_notty: test_prep
-       HARNESS_NOTTY=1 TESTFILE=harness ./runtests choose
+       HARNESS_NOTTY=1 TESTFILE=harness $(RUN_TESTS) choose
 
 test-reonly: test_prep_reonly
-       TEST_ARGS='-re \bre\/' TESTFILE=harness ./runtests choose
+       TEST_ARGS='-re \bre\/' TESTFILE=harness $(RUN_TESTS) choose
 
 
 # Porting tests (well-formedness of pod, manifest, etc)
index 20e99ff..2807111 100644 (file)
@@ -326,6 +326,7 @@ STORABLE_NLM                = $(EXTDIR)\Storable\Storable.NLM
 LISTUTIL_NLM           = $(EXTDIR)\List\Util.NLM
 MIMEBASE64_NLM         = $(EXTDIR)\MIME\Base64\Base64.NLM
 XSAPITEST_NLM          = $(EXTDIR)\XS\APItest\APItest.NLM
+XSAPITESTKEYWORDRPN_NLM        = $(EXTDIR)\XS\APItest\KeywordRPN\KeywordRPN.NLM
 XSTYPEMAP_NLM          = $(EXTDIR)\XS\Typemap\Typemap.NLM
 UNICODENORMALIZE_NLM   = $(EXTDIR)\Unicode\Normalize\Normalize.NLM
 
@@ -350,6 +351,7 @@ EXTENSION_NLM       =               \
                $(LISTUTIL_NLM)         \
                $(MIMEBASE64_NLM)       \
                $(XSAPITEST_NLM)        \
+               $(XSAPITESTKEYWORDRPN_NLM)      \
                $(XSTYPEMAP_NLM)        \
                $(UNICODENORMALIZE_NLM)  \
                $(FILTER_NLM)   
@@ -789,7 +791,7 @@ X2P_OBJ             = $(X2P_SRC:.c=.obj)
 
 DYNAMIC_EXT    = Socket IO Fcntl Opcode SDBM_File POSIX attributes B re \
                Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \
-               Storable/Storable List/Util MIME/Base64/Base64 XS/APItest/APItest \
+               Storable/Storable List/Util MIME/Base64/Base64 XS/APItest/APItest XS/APItest/KeywordRPN \
                XS/Typemap/Typemap Unicode/Normalize/Normalize Sys/Hostname
 
 STATIC_EXT     = DynaLoader
@@ -817,6 +819,7 @@ STORABLE            = $(EXTDIR)\Storable\Storable
 LISTUTIL               = $(EXTDIR)\List\Util
 MIMEBASE64             = $(EXTDIR)\MIME\Base64\Base64
 XSAPITEST              = $(EXTDIR)\XS\APItest\APItest
+XSAPITESTKEYWORDRPN    = $(EXTDIR)\XS\APItest\KeywordRPN\KeywordRPN
 XSTYPEMAP              = $(EXTDIR)\XS\Typemap\Typemap
 UNICODENORMALIZE       = $(EXTDIR)\Unicode\Normalize\Normalize
 
@@ -843,6 +846,7 @@ EXTENSION_C =               \
                $(LISTUTIL).c   \
                $(MIMEBASE64).c \
                $(XSAPITEST).c  \
+               $(XSAPITESTKEYWORDRPN).c        \
                $(XSTYPEMAP).c  \
                $(UNICODENORMALIZE).c   \
 
@@ -1267,6 +1271,12 @@ $(XSAPITEST_NLM):
        $(MAKE)
        cd ..\..\..\netware
 
+$(XSAPITESTKEYWORDRPN_NLM):
+       cd $(EXTDIR)\XS\$(*B)
+       ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl
+       $(MAKE)
+       cd ..\..\..\netware
+
 $(XSTYPEMAP_NLM):
        cd $(EXTDIR)\XS\$(*B)
        ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl
index 533a59f..e63d41c 100644 (file)
@@ -51,6 +51,7 @@ ccsymbols=''
 cf_by='nobody'
 cf_email='nobody@no.where.net'
 cf_time=''
+charbits='8'
 chgrp=''
 chmod=''
 chown=''
index 167d4d3..b810a7f 100644 (file)
@@ -249,6 +249,14 @@ cf_time (cf_who.U):
        Holds the output of the "date" command when the configuration file was
        produced. This is used to tag both config.sh and config_h.SH.
 
+charbits (charsize.U):
+       This variable contains the value of the CHARBITS symbol, which
+       indicates to the C program how many bits there are in a character.
+
+charsize (charsize.U):
+       This variable contains the value of the CHARSIZE symbol, which
+       indicates to the C program how many bytes there are in a character.
+
 chgrp (Loc.U):
        This variable is defined but not used by Configure.
        The value is the empty string and is not useful.
index 12d816a..41ba287 100755 (executable)
@@ -423,7 +423,7 @@ use File::Glob qw(:case);
     'CPANPLUS' =>
        {
        'MAINTAINER'    => 'kane',
-       'DISTRIBUTION'  => 'BINGOS/CPANPLUS-0.89_05.tar.gz',
+       'DISTRIBUTION'  => 'BINGOS/CPANPLUS-0.89_07.tar.gz',
        'FILES'         => q[cpan/CPANPLUS],
        'EXCLUDED'      => [ qr{^inc/},
                             qr{^t/dummy-.*\.hidden$},
@@ -443,7 +443,7 @@ use File::Glob qw(:case);
     'CPANPLUS::Dist::Build' =>
        {
        'MAINTAINER'    => 'bingos',
-       'DISTRIBUTION'  => 'BINGOS/CPANPLUS-Dist-Build-0.40.tar.gz',
+       'DISTRIBUTION'  => 'BINGOS/CPANPLUS-Dist-Build-0.41_01.tar.gz',
        'FILES'         => q[cpan/CPANPLUS-Dist-Build],
        'EXCLUDED'      => [ qr{^inc/},
                             qw{ t/99_pod.t
@@ -559,7 +559,7 @@ use File::Glob qw(:case);
     'ExtUtils::CBuilder' =>
        {
        'MAINTAINER'    => 'kwilliams',
-       'DISTRIBUTION'  => 'DAGOLDEN/ExtUtils-CBuilder-0.260301.tar.gz',
+       'DISTRIBUTION'  => 'DAGOLDEN/ExtUtils-CBuilder-0.27.tar.gz',
        'FILES'         => q[cpan/ExtUtils-CBuilder],
        'CPAN'          => 1,
        'UPSTREAM'      => 'cpan',
@@ -1033,7 +1033,7 @@ use File::Glob qw(:case);
     'Module::Load::Conditional' =>
        {
        'MAINTAINER'    => 'kane',
-       'DISTRIBUTION'  => 'BINGOS/Module-Load-Conditional-0.32.tar.gz',
+       'DISTRIBUTION'  => 'BINGOS/Module-Load-Conditional-0.34.tar.gz',
        'FILES'         => q[cpan/Module-Load-Conditional],
        'CPAN'          => 1,
        'UPSTREAM'      => 'cpan',
@@ -1734,6 +1734,14 @@ use File::Glob qw(:case);
        'UPSTREAM'      => 'cpan',
        },
 
+    'XS::APItest::KeywordRPN' =>
+       {
+       'MAINTAINER'    => 'zefram',
+       'FILES'         => q[ext/XS-APItest-KeywordRPN],
+       'CPAN'          => 0,
+       'UPSTREAM'      => 'blead',
+       },
+
     'XSLoader' =>
        {
        'MAINTAINER'    => 'saper',
@@ -1942,6 +1950,7 @@ use File::Glob qw(:case);
                                lib/hostname.pl
                                lib/importenv.pl
                                lib/integer.{pm,t}
+                               lib/legacy.pm
                                lib/less.{pm,t}
                                lib/locale.{pm,t}
                                lib/look.pl
index b958755..ab0a29b 100644 (file)
@@ -77,6 +77,7 @@ ccversion=''
 cf_by='merijn'
 cf_email='yourname@yourhost.yourplace.com'
 cf_time='Wed Jan 23 09:43:56 CET 2008'
+charbits='8'
 chgrp=''
 chmod='chmod'
 chown=''
@@ -560,7 +561,7 @@ doublesize='8'
 drand01='drand48()'
 drand48_r_proto='0'
 dtrace=''
-dynamic_ext='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap threads/shared Hash/Util/FieldHash'
+dynamic_ext='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap threads/shared Hash/Util/FieldHash'
 eagain='EAGAIN'
 ebcdic='undef'
 echo='echo'
@@ -575,7 +576,7 @@ endservent_r_proto='0'
 eunicefix=':'
 exe_ext=''
 expr='expr'
-extensions='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap threads/shared Hash/Util/FieldHash Compress/Zlib Errno IO_Compress_Base IO_Compress_Zlib Module/Pluggable Test/Harness'
+extensions='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/APItest/KeywordRPN XS/Typemap threads/shared Hash/Util/FieldHash Compress/Zlib Errno IO_Compress_Base IO_Compress_Zlib Module/Pluggable Test/Harness'
 extern_C='extern'
 extras=''
 fflushNULL='define'
@@ -767,7 +768,7 @@ issymlink='test -h'
 ivdformat='"Ld"'
 ivsize='8'
 ivtype='long long'
-known_extensions='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap threads/shared Hash/Util/FieldHash'
+known_extensions='attributes B Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex threads Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/APItest/KeywordRPN XS/Typemap threads/shared Hash/Util/FieldHash'
 ksh=''
 ld='cc'
 lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'
diff --git a/av.c b/av.c
index 4718af2..a4d6ea2 100644 (file)
--- a/av.c
+++ b/av.c
@@ -404,8 +404,14 @@ Perl_av_make(pTHX_ register I32 size, register SV **strp)
        AvFILLp(av) = AvMAX(av) = size - 1;
        for (i = 0; i < size; i++) {
            assert (*strp);
+
+           /* Don't let sv_setsv swipe, since our source array might
+              have multiple references to the same temp scalar (e.g.
+              from a list slice) */
+
            ary[i] = newSV(0);
-           sv_setsv(ary[i], *strp);
+           sv_setsv_flags(ary[i], *strp,
+                          SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
            strp++;
        }
     }
index ccb7f10..ff4c860 100755 (executable)
@@ -2943,6 +2943,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
 #define BYTEORDER 0x$byteorder /* large digits for MSB */
 #endif /* NeXT */
 
+/* CHARBITS:
+ *     This symbol contains the size of a char, so that the C preprocessor
+ *     can make decisions based on it.
+ */
+#define CHARBITS $charbits             /**/
+
 /* CASTI32:
  *     This symbol is defined if the C compiler can cast negative
  *     or large floating point numbers to 32-bit ints.
index d5ea932..934633e 100644 (file)
@@ -5854,6 +5854,7 @@ $ WC "ccversion='" + ccversion + "'"
 $ WC "cf_by='" + cf_by + "'"
 $ WC "cf_email='" + cf_email + "'"
 $ WC "cf_time='" + cf_time + "'"
+$ WC "charbits='8'"
 $ WC "config_args='" + config_args + "'"
 $ WC "config_sh='" + config_sh + "'"
 $ WC "cpp_stuff='" + cpp_stuff + "'"
diff --git a/cop.h b/cop.h
index 3633e9d..93154c8 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -114,6 +114,7 @@ typedef struct jmpenv JMPENV;
     STMT_START {                                                       \
        DEBUG_l(Perl_deb(aTHX_ "popping jumplevel was %p, now %p\n",    \
                         (void*)PL_top_env, (void*)cur_env.je_prev));                   \
+       assert(PL_top_env == &cur_env);                                 \
        PL_top_env = cur_env.je_prev;                                   \
     } STMT_END
 
index a42e10a..ff55801 100644 (file)
@@ -30,7 +30,7 @@ use Locale::Maketext::Simple    Class => 'CPANPLUS', Style => 'gettext';
 
 local $Params::Check::VERBOSE = 1;
 
-$VERSION = '0.40';
+$VERSION = '0.41_01';
 
 =pod
 
@@ -375,47 +375,52 @@ sub _find_prereqs {
 
     my $prereqs = {};
 
-    my $safe_ver = version->new('0.31_03');
+    $prereqs = $dist->find_mymeta_requires()
+       if $dist->can('find_mymeta_requires');
 
-    my $content;
-
-    if ( version->new( $Module::Build::VERSION ) >= $safe_ver and IPC::Cmd->can_capture_buffer ) {
-        my @buildflags = $dist->_buildflags_as_list( $buildflags );
+    if ( keys %$prereqs ) {
+        # Ugly hack
+    }
+    else {
+      my $safe_ver = version->new('0.31_03');
+      my $content;
+      if ( version->new( $Module::Build::VERSION ) >= $safe_ver and IPC::Cmd->can_capture_buffer ) {
+          my @buildflags = $dist->_buildflags_as_list( $buildflags );
 
-        # Use the new Build action 'prereq_data'
-        my $run_perl    = $conf->get_program('perlwrapper');
+          # Use the new Build action 'prereq_data'
+          my $run_perl    = $conf->get_program('perlwrapper');
 
-        unless ( scalar run(    command => [$perl, $run_perl, BUILD->($dir), 'prereq_data', @buildflags],
+          unless ( scalar run(    command => [$perl, $run_perl, BUILD->($dir), 'prereq_data', @buildflags],
                                 buffer  => \$content,
                                 verbose => 0 ) 
-        ) {
+          ) {
             error( loc( "Build 'prereq_data' failed: %1 %2", $!, $content ) );
             return;
-        }
+          }
 
-    }
-    else {
-        my $file = File::Spec->catfile( $dir, '_build', 'prereqs' );
-        return unless -f $file;
+        }
+        else {
+          my $file = File::Spec->catfile( $dir, '_build', 'prereqs' );
+          return unless -f $file;
 
-        my $fh = FileHandle->new();
+          my $fh = FileHandle->new();
 
-        unless( $fh->open( $file ) ) {
-           error( loc( "Cannot open '%1': %2", $file, $! ) );
-           return;
-        }
+          unless( $fh->open( $file ) ) {
+            error( loc( "Cannot open '%1': %2", $file, $! ) );
+            return;
+          }
         
-        $content = do { local $/; <$fh> };
-    }
+          $content = do { local $/; <$fh> };
+        }
 
-    return unless $content;
-    my $bphash = eval $content;
-    return unless $bphash and ref $bphash eq 'HASH';
-    foreach my $type ('requires', 'build_requires') {
-       next unless $bphash->{$type} and ref $bphash->{$type} eq 'HASH';
-       $prereqs->{$_} = $bphash->{$type}->{$_} for keys %{ $bphash->{$type} };
+        return unless $content;
+        my $bphash = eval $content;
+        return unless $bphash and ref $bphash eq 'HASH';
+        foreach my $type ('requires', 'build_requires') {
+          next unless $bphash->{$type} and ref $bphash->{$type} eq 'HASH';
+          $prereqs->{$_} = $bphash->{$type}->{$_} for keys %{ $bphash->{$type} };
+        }
     }
-
     # Temporary fix
     delete $prereqs->{'perl'};
 
index c04c247..2bf836a 100644 (file)
@@ -9,7 +9,7 @@ BEGIN {
     require Exporter;
     use vars    qw[$VERSION @ISA @EXPORT];
   
-    $VERSION    = '0.40';
+    $VERSION    = '0.41_01';
     @ISA        = qw[Exporter];
     @EXPORT     = qw[ BUILD_DIR BUILD ];
 }
index 5fc9ec8..53be374 100644 (file)
@@ -13,7 +13,7 @@ BEGIN {
     use vars        qw( @EXPORT @ISA $VERSION );
     @EXPORT     =   qw( shell fetch get install );
     @ISA        =   qw( Exporter );
-    $VERSION = "0.89_05";     #have to hardcode or cpan.org gets unhappy
+    $VERSION = "0.89_07";     #have to hardcode or cpan.org gets unhappy
 }
 
 ### purely for backward compatibility, so we can call it from the commandline:
index b6ffdbe..551b8ec 100644 (file)
@@ -293,23 +293,70 @@ and versions required.
 sub find_configure_requires {
     my $self = shift;
     my $mod  = $self->parent;
-    my %hash = @_;
+    my $meth = 'configure_requires';
+    
+    ### the prereqs as we have them now
+    my @args = ( 
+        defaults => $mod->status->$meth || {},
+        keys     => [ $meth ],
+    );
+
+    ### the default file to use, which may be overriden
+    push @args, ( file => META_YML->( $mod->status->extract ) )
+        if defined $mod->status->extract;
+        
+    my $href = $self->_prereqs_from_meta_file( @args, @_ );        
+
+    ### and store it in the module
+    $mod->status->$meth( $href );
+
+    return { %$href };
+}    
+
+sub find_mymeta_requires {
+    my $self = shift;
+    my $mod  = $self->parent;
+    my $meth = 'prereqs';
     
-    my $meta;
+    ### the prereqs as we have them now
+    my @args = ( 
+        defaults => $mod->status->$meth || {},
+        keys     => [qw|requires build_requires|],
+    );
+
+    ### the default file to use, which may be overriden
+    push @args, ( file => MYMETA_YML->( $mod->status->extract ) )
+        if defined $mod->status->extract;
+        
+    my $href = $self->_prereqs_from_meta_file( @args, @_ );        
+
+    ### and store it in the module
+    $mod->status->$meth( $href );
+
+    return { %$href };
+}
+    
+sub _prereqs_from_meta_file {
+    my $self = shift;
+    my $mod  = $self->parent;    
+    my %hash = @_;
+
+    my( $meta, $defaults, $keys );
     my $tmpl = {                ### check if we have an extract path. if not, we 
                                 ### get 'undef value' warnings from file::spec
-        file    => { default => do { defined $mod->status->extract
+        file        => { default => do { defined $mod->status->extract
                                         ? META_YML->( $mod->status->extract )
                                         : '' },
-                     store   => \$meta,
-                },
+                        store   => \$meta,
+                    },
+        defaults    => { required => 1, default => {}, strict_type => 1,
+                         store => \$defaults },
+        keys        => { required => 1, default => [], strict_type => 1,
+                         store => \$keys },
     };                
     
     check( $tmpl, \%hash ) or return;
     
-    ### default is an empty hashref
-    my $configure_requires = $mod->status->configure_requires || {};
-    
     ### if there's a meta file, we read it;
     if( -e $meta ) {
 
@@ -319,22 +366,21 @@ sub find_configure_requires {
   
         unless( $doc ) {
             error(loc( "Could not read %1: '%2'", $meta, $@ ));
-            return $configure_requires; # Causes problems if we don't return a hashref
+            return $defaults;
         }
 
-        ### read the configure_requires key, make sure not to throw
+        ### read the keys now, make sure not to throw
         ### away anything that was already added
-        $configure_requires = {
-            %$configure_requires,
-            %{ $doc->{'configure_requires'} },
-        } if $doc->{'configure_requires'};
+        for my $key ( @$keys ) {
+            $defaults = {
+                %$defaults,
+                %{ $doc->{$key} },
+            } if $doc->{ $key };
+        }
     }
     
-    ### and store it in the module
-    $mod->status->configure_requires( $configure_requires );
-    
     ### and return a copy
-    return \%{$configure_requires};
+    return \%{ $defaults };
 }
 
 =head2 $bool = $dist->_resolve_prereqs( ... )
index 262c83b..4249ecc 100644 (file)
@@ -465,6 +465,13 @@ sub _find_prereqs {
     };
     
     my $args = check( $tmpl, \%hash ) or return;      
+
+    ### see if we got prereqs from MYMETA
+    my $prereqs = $dist->find_mymeta_requires();
+    
+    ### we found some prereqs, we'll trust MYMETA
+    ### but we do need to run it through the callback
+    return $cb->_callbacks->filter_prereqs->( $cb, $prereqs ) if keys %$prereqs;
     
     my $fh = FileHandle->new();
     unless( $fh->open( $file ) ) {
@@ -480,11 +487,13 @@ sub _find_prereqs {
         
         while( $found =~ m/(?:\s)([\w\:]+)=>(?:q\[(.*?)\],?|undef)/g ) {
             if( defined $p{$1} ) {
-                msg(loc("Warning: PREREQ_PM mentions '%1' more than once. " .
-                        "Last mention wins.", $1 ), $verbose );
+                my $ver = $cb->_version_to_number(version => $2);
+                $p{$1} = $ver
+                  if $cb->_vcmp( $ver, $p{$1} ) > 0;
+            }
+            else {
+                $p{$1} = $cb->_version_to_number(version => $2);                  
             }
-            
-            $p{$1} = $cb->_version_to_number(version => $2);                  
         }
         last;
     }
index 8657941..d21dc8e 100644 (file)
@@ -42,7 +42,7 @@ use vars qw[@ISA $VERSION];
             CPANPLUS::Internals::Report
         ];
 
-$VERSION = "0.89_05";
+$VERSION = "0.89_07";
 
 =pod
 
index 1d05c98..1a38200 100644 (file)
@@ -149,6 +149,11 @@ use constant META_YML       => sub { return @_
                                         : 'META.yml';
                             }; 
 
+use constant MYMETA_YML     => sub { return @_
+                                        ? File::Spec->catfile( @_, 'MYMETA.yml' )
+                                        : 'MYMETA.yml';
+                            }; 
+
 use constant BLIB           => sub { return @_
                                         ? File::Spec->catfile(@_, 'blib')
                                         : 'blib';
index fda2548..b37e2b7 100644 (file)
@@ -26,7 +26,7 @@ local $Data::Dumper::Indent     = 1; # for dumpering from !
 BEGIN {
     use vars        qw[ $VERSION @ISA ];
     @ISA        =   qw[ CPANPLUS::Shell::_Base::ReadLine ];
-    $VERSION = "0.89_05";
+    $VERSION = "0.89_07";
 }
 
 load CPANPLUS::Shell;
index 776a05d..b86c638 100644 (file)
@@ -1,5 +1,36 @@
 Revision history for Perl extension ExtUtils::CBuilder.
 
+0.27 - Thu Oct 29 21:29:56 EDT 2009
+
+ Other:
+ - Removed Build.PL to avoid creating a circular dependency
+ - Added version numbers to Windows compiler driver modules
+
+0.26_05 - Sun Oct 25 17:29:02 EDT 2009
+
+ Bugs fixed:
+ - Fixed t/02link.t failures on cygwin with Perl 5.8 [David Golden]
+
+ Other:
+ - Made have_compiler (and have_cplusplus) quiet without echoing
+   the test command to STDOUT [David Golden]
+
+0.26_04 - Mon Oct 19 21:57:46 EDT 2009
+
+ Enhancements:
+ - Added 'have_cplusplus()' method to check for C++ support
+ - Added patches for building Perl with mingw64 [Sisyphus]
+ - Allow CC environment variable to override $Config{cc}
+
+ Bugs fixed:
+ - Fixed link executable command for Win32 MSVC (RT#40819) [Cosimo
+   Streppone]
+ - Removed MSVC version check when embedding a manifest file
+   (RT #43002) [Steve Hay]
+
+ Other:
+ - Split Windows compiler driver packages into individual *.pm files
+
 0.260301 - Sat Aug 29 11:04:41 EDT 2009
 
  Bugs fixed:
index 209afa8..7854e88 100644 (file)
@@ -5,7 +5,7 @@ use File::Path ();
 use File::Basename ();
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 $VERSION = eval $VERSION;
 
 # Okay, this is the brute-force method of finding out what kind of
@@ -133,6 +133,10 @@ linker, false otherwise.  To determine this, we actually compile and
 link a sample C library.  The sample will be compiled in the system
 tempdir or, if that fails for some reason, in the current directory.
 
+=item have_cplusplus
+
+Just like have_compiler but for C++ instead of C.
+
 =item compile
 
 Compiles a C source file and produces an object file.  The name of the
@@ -161,6 +165,11 @@ given as a list reference containing the arguments individually, or if
 this is not possible, as a string containing all the arguments
 together.
 
+=item C<C++>
+
+Specifies that the source file is a C++ source file and sets appropriate
+compiler flags
+
 =back
 
 The operation of this method is also affected by the
index ccd9692..28036c6 100644 (file)
@@ -9,7 +9,7 @@ use Text::ParseWords;
 use IO::File;
 
 use vars qw($VERSION);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 
 sub new {
   my $class = shift;
@@ -21,6 +21,7 @@ sub new {
   while (my ($k,$v) = each %Config) {
     $self->{config}{$k} = $v unless exists $self->{config}{$k};
   }
+  $self->{config}{cc} = $ENV{CC} if exists $ENV{CC};
   return $self;
 }
 
@@ -98,6 +99,7 @@ sub compile {
   my @extra_compiler_flags = $self->split_like_shell($args{extra_compiler_flags});
   my @cccdlflags = $self->split_like_shell($cf->{cccdlflags});
   my @ccflags = $self->split_like_shell($cf->{ccflags});
+  push @ccflags, qw/-x c++/ if $args{'C++'};
   my @optimize = $self->split_like_shell($cf->{optimize});
   my @flags = (@include_dirs, @defines, @cccdlflags, @extra_compiler_flags,
               $self->arg_nolink,
@@ -114,7 +116,7 @@ sub compile {
 }
 
 sub have_compiler {
-  my ($self) = @_;
+  my ($self, $is_cplusplus) = @_;
   return $self->{have_compiler} if defined $self->{have_compiler};
 
   my $result;
@@ -125,6 +127,7 @@ sub have_compiler {
     # don't clobber existing files (rare, but possible)
     my $rand = int(rand(2**31));
     my $tmpfile = File::Spec->catfile($dir, "compilet-$rand.c");
+    $tmpfile .= "c" if $is_cplusplus;
     if ( -e $tmpfile ) {
       redo DIR if $attempts--;
       next DIR;
@@ -132,13 +135,19 @@ sub have_compiler {
 
     {
       my $FH = IO::File->new("> $tmpfile") or die "Can't create $tmpfile: $!";
-      print $FH "int boot_compilet() { return 1; }\n";
+      if ( $is_cplusplus ) {
+        print $FH "class Bogus { public: int boot_compilet() { return 1; } };\n";
+      }
+      else {
+        print $FH "int boot_compilet() { return 1; }\n";
+      }
     }
 
     my ($obj_file, @lib_files);
     eval {
       local $^W = 0;
-      $obj_file = $self->compile(source => $tmpfile);
+      local $self->{quiet} = 1;
+      $obj_file = $self->compile('C++' => $is_cplusplus, source => $tmpfile);
       @lib_files = $self->link(objects => $obj_file, module_name => 'compilet');
     };
     $result = $@ ? 0 : 1;
@@ -152,6 +161,11 @@ sub have_compiler {
   return $self->{have_compiler} = $result;
 }
 
+sub have_cplusplus {
+  push @_, 1;
+  goto &have_compiler;
+}
+
 sub lib_file {
   my ($self, $dl_file) = @_;
   $dl_file =~ s/\.[^.]+$//;
index 92efcc4..78ff244 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use ExtUtils::CBuilder::Base;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Base);
 
 sub link_executable {
index 5f58e39..35a2eba 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use ExtUtils::CBuilder::Base;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Base);
 
 use File::Spec::Functions qw(catfile catdir);
index a613073..f0b98db 100644 (file)
@@ -10,16 +10,36 @@ use ExtUtils::CBuilder::Base;
 use IO::File;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Base);
 
+=begin comment
+
+The compiler-specific packages implement functions for generating properly
+formatted commandlines for the compiler being used. Each package
+defines two primary functions 'format_linker_cmd()' &
+'format_compiler_cmd()' that accepts a list of named arguments (a
+hash) and returns a list of formatted options suitable for invoking the
+compiler. By default, if the compiler supports scripting of its
+operation then a script file is built containing the options while
+those options are removed from the commandline, and a reference to the
+script is pushed onto the commandline in their place. Scripting the
+compiler in this way helps to avoid the problems associated with long
+commandlines under some shells.
+
+=end comment
+
+=cut
+
 sub new {
   my $class = shift;
   my $self = $class->SUPER::new(@_);
   my $cf = $self->{config};
 
   # Inherit from an appropriate compiler driver class
-  unshift @ISA, "ExtUtils::CBuilder::Platform::Windows::" . $self->_compiler_type;
+  my $driver = "ExtUtils::CBuilder::Platform::Windows::" . $self->_compiler_type;
+  eval "require $driver" or die "Could not load compiler driver: $@";
+  unshift @ISA, $driver;
 
   return $self;
 }
@@ -238,423 +258,6 @@ sub perl_inc {
 
 1;
 
-########################################################################
-
-=begin comment
-
-The packages below implement functions for generating properly
-formatted commandlines for the compiler being used. Each package
-defines two primary functions 'format_linker_cmd()' &
-'format_compiler_cmd()' that accepts a list of named arguments (a
-hash) and returns a list of formatted options suitable for invoking the
-compiler. By default, if the compiler supports scripting of its
-operation then a script file is built containing the options while
-those options are removed from the commandline, and a reference to the
-script is pushed onto the commandline in their place. Scripting the
-compiler in this way helps to avoid the problems associated with long
-commandlines under some shells.
-
-=end comment
-
-=cut
-
-########################################################################
-package ExtUtils::CBuilder::Platform::Windows::MSVC;
-
-sub format_compiler_cmd {
-  my ($self, %spec) = @_;
-
-  foreach my $path ( @{ $spec{includes} || [] },
-                     @{ $spec{perlinc}  || [] } ) {
-    $path = '-I' . $path;
-  }
-
-  %spec = $self->write_compiler_script(%spec)
-    if $spec{use_scripts};
-
-  return [ grep {defined && length} (
-    $spec{cc},'-nologo','-c',
-    @{$spec{includes}}      ,
-    @{$spec{cflags}}        ,
-    @{$spec{optimize}}      ,
-    @{$spec{defines}}       ,
-    @{$spec{perlinc}}       ,
-    "-Fo$spec{output}"      ,
-    $spec{source}           ,
-  ) ];
-}
-
-sub write_compiler_script {
-  my ($self, %spec) = @_;
-
-  my $script = File::Spec->catfile( $spec{srcdir},
-                                    $spec{basename} . '.ccs' );
-
-  $self->add_to_cleanup($script);
-  print "Generating script '$script'\n" if !$self->{quiet};
-
-  my $SCRIPT = IO::File->new( ">$script" )
-    or die( "Could not create script '$script': $!" );
-
-  print $SCRIPT join( "\n",
-    map { ref $_ ? @{$_} : $_ }
-    grep defined,
-    delete(
-      @spec{ qw(includes cflags optimize defines perlinc) } )
-  );
-
-  push @{$spec{includes}}, '@"' . $script . '"';
-
-  return %spec;
-}
-
-sub format_linker_cmd {
-  my ($self, %spec) = @_;
-  my $cf = $self->{config};
-
-  foreach my $path ( @{$spec{libpath}} ) {
-    $path = "-libpath:$path";
-  }
-
-  my $output = $spec{output};
-
-  $spec{def_file}  &&= '-def:'      . $spec{def_file};
-  $spec{output}    &&= '-out:'      . $spec{output};
-  $spec{manifest}  &&= '-manifest ' . $spec{manifest};
-  $spec{implib}    &&= '-implib:'   . $spec{implib};
-  $spec{map_file}  &&= '-map:'      . $spec{map_file};
-
-  %spec = $self->write_linker_script(%spec)
-    if $spec{use_scripts};
-
-  my @cmds; # Stores the series of commands needed to build the module.
-
-  push @cmds, [ grep {defined && length} (
-    $spec{ld}               ,
-    @{$spec{lddlflags}}     ,
-    @{$spec{libpath}}       ,
-    @{$spec{other_ldflags}} ,
-    @{$spec{startup}}       ,
-    @{$spec{objects}}       ,
-    $spec{map_file}         ,
-    $spec{libperl}          ,
-    @{$spec{perllibs}}      ,
-    $spec{def_file}         ,
-    $spec{implib}           ,
-    $spec{output}           ,
-  ) ];
-
-  # Embed the manifest file for VC 2005 (aka VC 8) or higher, but not for the 64-bit Platform SDK compiler
-  if ($cf->{ivsize} == 4 && $cf->{cc} eq 'cl' and $cf->{ccversion} =~ /^(\d+)/ and $1 >= 14) {
-    push @cmds, [
-      'if', 'exist', $spec{manifest}, 'mt', '-nologo', $spec{manifest}, '-outputresource:' . "$output;2"
-    ];
-  }
-
-  return @cmds;
-}
-
-sub write_linker_script {
-  my ($self, %spec) = @_;
-
-  my $script = File::Spec->catfile( $spec{srcdir},
-                                    $spec{basename} . '.lds' );
-
-  $self->add_to_cleanup($script);
-
-  print "Generating script '$script'\n" if !$self->{quiet};
-
-  my $SCRIPT = IO::File->new( ">$script" )
-    or die( "Could not create script '$script': $!" );
-
-  print $SCRIPT join( "\n",
-    map { ref $_ ? @{$_} : $_ }
-    grep defined,
-    delete(
-      @spec{ qw(lddlflags libpath other_ldflags
-                startup objects libperl perllibs
-                def_file implib map_file)            } )
-  );
-
-  push @{$spec{lddlflags}}, '@"' . $script . '"';
-
-  return %spec;
-}
-
-1;
-
-########################################################################
-package ExtUtils::CBuilder::Platform::Windows::BCC;
-
-sub format_compiler_cmd {
-  my ($self, %spec) = @_;
-
-  foreach my $path ( @{ $spec{includes} || [] },
-                     @{ $spec{perlinc}  || [] } ) {
-    $path = '-I' . $path;
-  }
-
-  %spec = $self->write_compiler_script(%spec)
-    if $spec{use_scripts};
-
-  return [ grep {defined && length} (
-    $spec{cc}, '-c'         ,
-    @{$spec{includes}}      ,
-    @{$spec{cflags}}        ,
-    @{$spec{optimize}}      ,
-    @{$spec{defines}}       ,
-    @{$spec{perlinc}}       ,
-    "-o$spec{output}"       ,
-    $spec{source}           ,
-  ) ];
-}
-
-sub write_compiler_script {
-  my ($self, %spec) = @_;
-
-  my $script = File::Spec->catfile( $spec{srcdir},
-                                    $spec{basename} . '.ccs' );
-
-  $self->add_to_cleanup($script);
-
-  print "Generating script '$script'\n" if !$self->{quiet};
-
-  my $SCRIPT = IO::File->new( ">$script" )
-    or die( "Could not create script '$script': $!" );
-
-  # XXX Borland "response files" seem to be unable to accept macro
-  # definitions containing quoted strings. Escaping strings with
-  # backslash doesn't work, and any level of quotes are stripped. The
-  # result is is a floating point number in the source file where a
-  # string is expected. So we leave the macros on the command line.
-  print $SCRIPT join( "\n",
-    map { ref $_ ? @{$_} : $_ }
-    grep defined,
-    delete(
-      @spec{ qw(includes cflags optimize perlinc) } )
-  );
-
-  push @{$spec{includes}}, '@"' . $script . '"';
-
-  return %spec;
-}
-
-sub format_linker_cmd {
-  my ($self, %spec) = @_;
-
-  foreach my $path ( @{$spec{libpath}} ) {
-    $path = "-L$path";
-  }
-
-  push( @{$spec{startup}}, 'c0d32.obj' )
-    unless ( $spec{starup} && @{$spec{startup}} );
-
-  %spec = $self->write_linker_script(%spec)
-    if $spec{use_scripts};
-
-  return [ grep {defined && length} (
-    $spec{ld}               ,
-    @{$spec{lddlflags}}     ,
-    @{$spec{libpath}}       ,
-    @{$spec{other_ldflags}} ,
-    @{$spec{startup}}       ,
-    @{$spec{objects}}       , ',',
-    $spec{output}           , ',',
-    $spec{map_file}         , ',',
-    $spec{libperl}          ,
-    @{$spec{perllibs}}      , ',',
-    $spec{def_file}
-  ) ];
-}
-
-sub write_linker_script {
-  my ($self, %spec) = @_;
-
-  # To work around Borlands "unique" commandline syntax,
-  # two scripts are used:
-
-  my $ld_script = File::Spec->catfile( $spec{srcdir},
-                                       $spec{basename} . '.lds' );
-  my $ld_libs   = File::Spec->catfile( $spec{srcdir},
-                                       $spec{basename} . '.lbs' );
-
-  $self->add_to_cleanup($ld_script, $ld_libs);
-
-  print "Generating scripts '$ld_script' and '$ld_libs'.\n" if !$self->{quiet};
-
-  # Script 1: contains options & names of object files.
-  my $LD_SCRIPT = IO::File->new( ">$ld_script" )
-    or die( "Could not create linker script '$ld_script': $!" );
-
-  print $LD_SCRIPT join( " +\n",
-    map { @{$_} }
-    grep defined,
-    delete(
-      @spec{ qw(lddlflags libpath other_ldflags startup objects) } )
-  );
-
-  # Script 2: contains name of libs to link against.
-  my $LD_LIBS = IO::File->new( ">$ld_libs" )
-    or die( "Could not create linker script '$ld_libs': $!" );
-
-  print $LD_LIBS join( " +\n",
-     (delete $spec{libperl}  || ''),
-    @{delete $spec{perllibs} || []},
-  );
-
-  push @{$spec{lddlflags}}, '@"' . $ld_script  . '"';
-  push @{$spec{perllibs}},  '@"' . $ld_libs    . '"';
-
-  return %spec;
-}
-
-1;
-
-########################################################################
-package ExtUtils::CBuilder::Platform::Windows::GCC;
-
-sub format_compiler_cmd {
-  my ($self, %spec) = @_;
-
-  foreach my $path ( @{ $spec{includes} || [] },
-                     @{ $spec{perlinc}  || [] } ) {
-    $path = '-I' . $path;
-  }
-
-  # split off any -arguments included in cc
-  my @cc = split / (?=-)/, $spec{cc};
-
-  return [ grep {defined && length} (
-    @cc, '-c'               ,
-    @{$spec{includes}}      ,
-    @{$spec{cflags}}        ,
-    @{$spec{optimize}}      ,
-    @{$spec{defines}}       ,
-    @{$spec{perlinc}}       ,
-    '-o', $spec{output}     ,
-    $spec{source}           ,
-  ) ];
-}
-
-sub format_linker_cmd {
-  my ($self, %spec) = @_;
-
-  # The Config.pm variable 'libperl' is hardcoded to the full name
-  # of the perl import library (i.e. 'libperl56.a'). GCC will not
-  # find it unless the 'lib' prefix & the extension are stripped.
-  $spec{libperl} =~ s/^(?:lib)?([^.]+).*$/-l$1/;
-
-  unshift( @{$spec{other_ldflags}}, '-nostartfiles' )
-    if ( $spec{startup} && @{$spec{startup}} );
-
-  # From ExtUtils::MM_Win32:
-  #
-  ## one thing for GCC/Mingw32:
-  ## we try to overcome non-relocateable-DLL problems by generating
-  ##    a (hopefully unique) image-base from the dll's name
-  ## -- BKS, 10-19-1999
-  File::Basename::basename( $spec{output} ) =~ /(....)(.{0,4})/;
-  $spec{image_base} = sprintf( "0x%x0000", unpack('n', $1 ^ $2) );
-
-  %spec = $self->write_linker_script(%spec)
-    if $spec{use_scripts};
-
-  foreach my $path ( @{$spec{libpath}} ) {
-    $path = "-L$path";
-  }
-
-  my @cmds; # Stores the series of commands needed to build the module.
-
-  push @cmds, [
-    'dlltool', '--def'        , $spec{def_file},
-               '--output-exp' , $spec{explib}
-  ];
-
-  # split off any -arguments included in ld
-  my @ld = split / (?=-)/, $spec{ld};
-
-  push @cmds, [ grep {defined && length} (
-    @ld                       ,
-    '-o', $spec{output}       ,
-    "-Wl,--base-file,$spec{base_file}"   ,
-    "-Wl,--image-base,$spec{image_base}" ,
-    @{$spec{lddlflags}}       ,
-    @{$spec{libpath}}         ,
-    @{$spec{startup}}         ,
-    @{$spec{objects}}         ,
-    @{$spec{other_ldflags}}   ,
-    $spec{libperl}            ,
-    @{$spec{perllibs}}        ,
-    $spec{explib}             ,
-    $spec{map_file} ? ('-Map', $spec{map_file}) : ''
-  ) ];
-
-  push @cmds, [
-    'dlltool', '--def'        , $spec{def_file},
-               '--output-exp' , $spec{explib},
-               '--base-file'  , $spec{base_file}
-  ];
-
-  push @cmds, [ grep {defined && length} (
-    @ld                       ,
-    '-o', $spec{output}       ,
-    "-Wl,--image-base,$spec{image_base}" ,
-    @{$spec{lddlflags}}       ,
-    @{$spec{libpath}}         ,
-    @{$spec{startup}}         ,
-    @{$spec{objects}}         ,
-    @{$spec{other_ldflags}}   ,
-    $spec{libperl}            ,
-    @{$spec{perllibs}}        ,
-    $spec{explib}             ,
-    $spec{map_file} ? ('-Map', $spec{map_file}) : ''
-  ) ];
-
-  return @cmds;
-}
-
-sub write_linker_script {
-  my ($self, %spec) = @_;
-
-  my $script = File::Spec->catfile( $spec{srcdir},
-                                    $spec{basename} . '.lds' );
-
-  $self->add_to_cleanup($script);
-
-  print "Generating script '$script'\n" if !$self->{quiet};
-
-  my $SCRIPT = IO::File->new( ">$script" )
-    or die( "Could not create script '$script': $!" );
-
-  print $SCRIPT ( 'SEARCH_DIR(' . $_ . ")\n" )
-    for @{delete $spec{libpath} || []};
-
-  # gcc takes only one startup file, so the first object in startup is
-  # specified as the startup file and any others are shifted into the
-  # beginning of the list of objects.
-  if ( $spec{startup} && @{$spec{startup}} ) {
-    print $SCRIPT 'STARTUP(' . shift( @{$spec{startup}} ) . ")\n";
-    unshift @{$spec{objects}},
-      @{delete $spec{startup} || []};
-  }
-
-  print $SCRIPT 'INPUT(' . join( ',',
-    @{delete $spec{objects}  || []}
-  ) . ")\n";
-
-  print $SCRIPT 'INPUT(' . join( ' ',
-     (delete $spec{libperl}  || ''),
-    @{delete $spec{perllibs} || []},
-  ) . ")\n";
-
-  #it is important to keep the order 1.linker_script - 2.other_ldflags
-  @{$spec{other_ldflags}} = ( '"' . $script . '"', @{$spec{other_ldflags}} );
-
-  return %spec;
-}
-
-1;
-
 __END__
 
 =head1 NAME
diff --git a/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm b/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
new file mode 100644 (file)
index 0000000..ee65c91
--- /dev/null
@@ -0,0 +1,130 @@
+package ExtUtils::CBuilder::Platform::Windows::BCC;
+
+use vars qw($VERSION);
+$VERSION = '0.27';
+
+sub format_compiler_cmd {
+  my ($self, %spec) = @_;
+
+  foreach my $path ( @{ $spec{includes} || [] },
+                     @{ $spec{perlinc}  || [] } ) {
+    $path = '-I' . $path;
+  }
+
+  %spec = $self->write_compiler_script(%spec)
+    if $spec{use_scripts};
+
+  return [ grep {defined && length} (
+    $spec{cc}, '-c'         ,
+    @{$spec{includes}}      ,
+    @{$spec{cflags}}        ,
+    @{$spec{optimize}}      ,
+    @{$spec{defines}}       ,
+    @{$spec{perlinc}}       ,
+    "-o$spec{output}"       ,
+    $spec{source}           ,
+  ) ];
+}
+
+sub write_compiler_script {
+  my ($self, %spec) = @_;
+
+  my $script = File::Spec->catfile( $spec{srcdir},
+                                    $spec{basename} . '.ccs' );
+
+  $self->add_to_cleanup($script);
+
+  print "Generating script '$script'\n" if !$self->{quiet};
+
+  my $SCRIPT = IO::File->new( ">$script" )
+    or die( "Could not create script '$script': $!" );
+
+  # XXX Borland "response files" seem to be unable to accept macro
+  # definitions containing quoted strings. Escaping strings with
+  # backslash doesn't work, and any level of quotes are stripped. The
+  # result is is a floating point number in the source file where a
+  # string is expected. So we leave the macros on the command line.
+  print $SCRIPT join( "\n",
+    map { ref $_ ? @{$_} : $_ }
+    grep defined,
+    delete(
+      @spec{ qw(includes cflags optimize perlinc) } )
+  );
+
+  push @{$spec{includes}}, '@"' . $script . '"';
+
+  return %spec;
+}
+
+sub format_linker_cmd {
+  my ($self, %spec) = @_;
+
+  foreach my $path ( @{$spec{libpath}} ) {
+    $path = "-L$path";
+  }
+
+  push( @{$spec{startup}}, 'c0d32.obj' )
+    unless ( $spec{starup} && @{$spec{startup}} );
+
+  %spec = $self->write_linker_script(%spec)
+    if $spec{use_scripts};
+
+  return [ grep {defined && length} (
+    $spec{ld}               ,
+    @{$spec{lddlflags}}     ,
+    @{$spec{libpath}}       ,
+    @{$spec{other_ldflags}} ,
+    @{$spec{startup}}       ,
+    @{$spec{objects}}       , ',',
+    $spec{output}           , ',',
+    $spec{map_file}         , ',',
+    $spec{libperl}          ,
+    @{$spec{perllibs}}      , ',',
+    $spec{def_file}
+  ) ];
+}
+
+sub write_linker_script {
+  my ($self, %spec) = @_;
+
+  # To work around Borlands "unique" commandline syntax,
+  # two scripts are used:
+
+  my $ld_script = File::Spec->catfile( $spec{srcdir},
+                                       $spec{basename} . '.lds' );
+  my $ld_libs   = File::Spec->catfile( $spec{srcdir},
+                                       $spec{basename} . '.lbs' );
+
+  $self->add_to_cleanup($ld_script, $ld_libs);
+
+  print "Generating scripts '$ld_script' and '$ld_libs'.\n" if !$self->{quiet};
+
+  # Script 1: contains options & names of object files.
+  my $LD_SCRIPT = IO::File->new( ">$ld_script" )
+    or die( "Could not create linker script '$ld_script': $!" );
+
+  print $LD_SCRIPT join( " +\n",
+    map { @{$_} }
+    grep defined,
+    delete(
+      @spec{ qw(lddlflags libpath other_ldflags startup objects) } )
+  );
+
+  # Script 2: contains name of libs to link against.
+  my $LD_LIBS = IO::File->new( ">$ld_libs" )
+    or die( "Could not create linker script '$ld_libs': $!" );
+
+  print $LD_LIBS join( " +\n",
+     (delete $spec{libperl}  || ''),
+    @{delete $spec{perllibs} || []},
+  );
+
+  push @{$spec{lddlflags}}, '@"' . $ld_script  . '"';
+  push @{$spec{perllibs}},  '@"' . $ld_libs    . '"';
+
+  return %spec;
+}
+
+1;
+
+
diff --git a/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm b/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
new file mode 100644 (file)
index 0000000..132bf84
--- /dev/null
@@ -0,0 +1,151 @@
+package ExtUtils::CBuilder::Platform::Windows::GCC;
+
+use vars qw($VERSION);
+$VERSION = '0.27';
+
+sub format_compiler_cmd {
+  my ($self, %spec) = @_;
+
+  foreach my $path ( @{ $spec{includes} || [] },
+                     @{ $spec{perlinc}  || [] } ) {
+    $path = '-I' . $path;
+  }
+
+  # split off any -arguments included in cc
+  my @cc = split / (?=-)/, $spec{cc};
+
+  return [ grep {defined && length} (
+    @cc, '-c'               ,
+    @{$spec{includes}}      ,
+    @{$spec{cflags}}        ,
+    @{$spec{optimize}}      ,
+    @{$spec{defines}}       ,
+    @{$spec{perlinc}}       ,
+    '-o', $spec{output}     ,
+    $spec{source}           ,
+  ) ];
+}
+
+sub format_linker_cmd {
+  my ($self, %spec) = @_;
+  my $cf = $self->{config};
+
+  # The Config.pm variable 'libperl' is hardcoded to the full name
+  # of the perl import library (i.e. 'libperl56.a'). GCC will not
+  # find it unless the 'lib' prefix & the extension are stripped.
+  $spec{libperl} =~ s/^(?:lib)?([^.]+).*$/-l$1/;
+
+  unshift( @{$spec{other_ldflags}}, '-nostartfiles' )
+    if ( $spec{startup} && @{$spec{startup}} );
+
+  # From ExtUtils::MM_Win32:
+  #
+  ## one thing for GCC/Mingw32:
+  ## we try to overcome non-relocateable-DLL problems by generating
+  ##    a (hopefully unique) image-base from the dll's name
+  ## -- BKS, 10-19-1999
+  File::Basename::basename( $spec{output} ) =~ /(....)(.{0,4})/;
+  $spec{image_base} = sprintf( "0x%x0000", unpack('n', $1 ^ $2) );
+
+  %spec = $self->write_linker_script(%spec)
+    if $spec{use_scripts};
+
+  foreach my $path ( @{$spec{libpath}} ) {
+    $path = "-L$path";
+  }
+
+  my @cmds; # Stores the series of commands needed to build the module.
+
+  my $DLLTOOL = $cf->{dlltool} || 'dlltool';
+
+  push @cmds, [
+    $DLLTOOL, '--def'        , $spec{def_file},
+              '--output-exp' , $spec{explib}
+  ];
+
+  # split off any -arguments included in ld
+  my @ld = split / (?=-)/, $spec{ld};
+
+  push @cmds, [ grep {defined && length} (
+    @ld                       ,
+    '-o', $spec{output}       ,
+    "-Wl,--base-file,$spec{base_file}"   ,
+    "-Wl,--image-base,$spec{image_base}" ,
+    @{$spec{lddlflags}}       ,
+    @{$spec{libpath}}         ,
+    @{$spec{startup}}         ,
+    @{$spec{objects}}         ,
+    @{$spec{other_ldflags}}   ,
+    $spec{libperl}            ,
+    @{$spec{perllibs}}        ,
+    $spec{explib}             ,
+    $spec{map_file} ? ('-Map', $spec{map_file}) : ''
+  ) ];
+
+  push @cmds, [
+    $DLLTOOL, '--def'        , $spec{def_file},
+              '--output-exp' , $spec{explib},
+              '--base-file'  , $spec{base_file}
+  ];
+
+  push @cmds, [ grep {defined && length} (
+    @ld                       ,
+    '-o', $spec{output}       ,
+    "-Wl,--image-base,$spec{image_base}" ,
+    @{$spec{lddlflags}}       ,
+    @{$spec{libpath}}         ,
+    @{$spec{startup}}         ,
+    @{$spec{objects}}         ,
+    @{$spec{other_ldflags}}   ,
+    $spec{libperl}            ,
+    @{$spec{perllibs}}        ,
+    $spec{explib}             ,
+    $spec{map_file} ? ('-Map', $spec{map_file}) : ''
+  ) ];
+
+  return @cmds;
+}
+
+sub write_linker_script {
+  my ($self, %spec) = @_;
+
+  my $script = File::Spec->catfile( $spec{srcdir},
+                                    $spec{basename} . '.lds' );
+
+  $self->add_to_cleanup($script);
+
+  print "Generating script '$script'\n" if !$self->{quiet};
+
+  my $SCRIPT = IO::File->new( ">$script" )
+    or die( "Could not create script '$script': $!" );
+
+  print $SCRIPT ( 'SEARCH_DIR(' . $_ . ")\n" )
+    for @{delete $spec{libpath} || []};
+
+  # gcc takes only one startup file, so the first object in startup is
+  # specified as the startup file and any others are shifted into the
+  # beginning of the list of objects.
+  if ( $spec{startup} && @{$spec{startup}} ) {
+    print $SCRIPT 'STARTUP(' . shift( @{$spec{startup}} ) . ")\n";
+    unshift @{$spec{objects}},
+      @{delete $spec{startup} || []};
+  }
+
+  print $SCRIPT 'INPUT(' . join( ',',
+    @{delete $spec{objects}  || []}
+  ) . ")\n";
+
+  print $SCRIPT 'INPUT(' . join( ' ',
+     (delete $spec{libperl}  || ''),
+    @{delete $spec{perllibs} || []},
+  ) . ")\n";
+
+  #it is important to keep the order 1.linker_script - 2.other_ldflags
+  unshift @{$spec{other_ldflags}}, '"' . $script . '"';
+
+  return %spec;
+}
+
+1;
+
+
diff --git a/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm b/cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
new file mode 100644 (file)
index 0000000..7da1c9b
--- /dev/null
@@ -0,0 +1,131 @@
+package ExtUtils::CBuilder::Platform::Windows::MSVC;
+
+use vars qw($VERSION);
+$VERSION = '0.27';
+
+sub arg_exec_file {
+  my ($self, $file) = @_;
+  return "/OUT:$file";
+}
+
+sub format_compiler_cmd {
+  my ($self, %spec) = @_;
+
+  foreach my $path ( @{ $spec{includes} || [] },
+                     @{ $spec{perlinc}  || [] } ) {
+    $path = '-I' . $path;
+  }
+
+  %spec = $self->write_compiler_script(%spec)
+    if $spec{use_scripts};
+
+  return [ grep {defined && length} (
+    $spec{cc},'-nologo','-c',
+    @{$spec{includes}}      ,
+    @{$spec{cflags}}        ,
+    @{$spec{optimize}}      ,
+    @{$spec{defines}}       ,
+    @{$spec{perlinc}}       ,
+    "-Fo$spec{output}"      ,
+    $spec{source}           ,
+  ) ];
+}
+
+sub write_compiler_script {
+  my ($self, %spec) = @_;
+
+  my $script = File::Spec->catfile( $spec{srcdir},
+                                    $spec{basename} . '.ccs' );
+
+  $self->add_to_cleanup($script);
+  print "Generating script '$script'\n" if !$self->{quiet};
+
+  my $SCRIPT = IO::File->new( ">$script" )
+    or die( "Could not create script '$script': $!" );
+
+  print $SCRIPT join( "\n",
+    map { ref $_ ? @{$_} : $_ }
+    grep defined,
+    delete(
+      @spec{ qw(includes cflags optimize defines perlinc) } )
+  );
+
+  push @{$spec{includes}}, '@"' . $script . '"';
+
+  return %spec;
+}
+
+sub format_linker_cmd {
+  my ($self, %spec) = @_;
+  my $cf = $self->{config};
+
+  foreach my $path ( @{$spec{libpath}} ) {
+    $path = "-libpath:$path";
+  }
+
+  my $output = $spec{output};
+
+  $spec{def_file}  &&= '-def:'      . $spec{def_file};
+  $spec{output}    &&= '-out:'      . $spec{output};
+  $spec{manifest}  &&= '-manifest ' . $spec{manifest};
+  $spec{implib}    &&= '-implib:'   . $spec{implib};
+  $spec{map_file}  &&= '-map:'      . $spec{map_file};
+
+  %spec = $self->write_linker_script(%spec)
+    if $spec{use_scripts};
+
+  my @cmds; # Stores the series of commands needed to build the module.
+
+  push @cmds, [ grep {defined && length} (
+    $spec{ld}               ,
+    @{$spec{lddlflags}}     ,
+    @{$spec{libpath}}       ,
+    @{$spec{other_ldflags}} ,
+    @{$spec{startup}}       ,
+    @{$spec{objects}}       ,
+    $spec{map_file}         ,
+    $spec{libperl}          ,
+    @{$spec{perllibs}}      ,
+    $spec{def_file}         ,
+    $spec{implib}           ,
+    $spec{output}           ,
+  ) ];
+
+  # Embed the manifest file if it exists
+  push @cmds, [
+    'if', 'exist', $spec{manifest}, 'mt', '-nologo', $spec{manifest}, '-outputresource:' . "$output;2"
+  ];
+
+  return @cmds;
+}
+
+sub write_linker_script {
+  my ($self, %spec) = @_;
+
+  my $script = File::Spec->catfile( $spec{srcdir},
+                                    $spec{basename} . '.lds' );
+
+  $self->add_to_cleanup($script);
+
+  print "Generating script '$script'\n" if !$self->{quiet};
+
+  my $SCRIPT = IO::File->new( ">$script" )
+    or die( "Could not create script '$script': $!" );
+
+  print $SCRIPT join( "\n",
+    map { ref $_ ? @{$_} : $_ }
+    grep defined,
+    delete(
+      @spec{ qw(lddlflags libpath other_ldflags
+                startup objects libperl perllibs
+                def_file implib map_file)            } )
+  );
+
+  push @{$spec{lddlflags}}, '@"' . $script . '"';
+
+  return %spec;
+}
+
+1;
+
+
index c03dc6e..656e0dc 100644 (file)
@@ -5,7 +5,7 @@ use ExtUtils::CBuilder::Platform::Unix;
 use File::Spec;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub need_prelink { 1 }
index 64a0c99..f865097 100644 (file)
@@ -5,13 +5,16 @@ use File::Spec;
 use ExtUtils::CBuilder::Platform::Unix;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
+# TODO: If a specific exe_file name is requested, if the exe created
+# doesn't have that name, we might want to rename it.  Apparently asking
+# for an exe of "foo" might result in "foo.exe".  Alternatively, we should
+# make sure the return value is correctly "foo.exe".
+# C.f http://rt.cpan.org/Public/Bug/Display.html?id=41003
 sub link_executable {
   my $self = shift;
-  # $Config{ld} is okay. Circumvent the Unix ld=cc override in the superclass.
-  local $self->{config}{cc} = $self->{config}{ld};
   return $self->SUPER::link_executable(@_);
 }
 
index b187cb0..efc7934 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub compile {
index f4ca387..d07b71f 100644 (file)
@@ -6,7 +6,7 @@ use File::Spec;
 
 use vars qw($VERSION @ISA);
 @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 
 sub link_executable {
   my $self = shift;
index a150e12..2815d58 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 
 use vars qw($VERSION @ISA);
-$VERSION = '0.260301';
+$VERSION = '0.27';
 @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub need_prelink { 1 }
index 245bce5..f20f891 100644 (file)
@@ -16,22 +16,30 @@ BEGIN {
   }
 }
 
-plan tests => 4;
+plan tests => 6;
 
 require_ok "ExtUtils::CBuilder";
 
 my $b = eval { ExtUtils::CBuilder->new(quiet => 1) };
 ok( $b, "got CBuilder object" ) or diag $@;
 
+my $bogus_path = 'djaadjfkadjkfajdf';
+my $run_perl = "$perl -e1 --";
 # test missing compiler
-$b->{config}{cc} = 'djaadjfkadjkfajdf';
-$b->{config}{ld} = 'djaadjfkadjkfajdf';
+$b->{config}{cc} = $bogus_path;
+$b->{config}{ld} = $bogus_path;
+
+$b->{have_compiler} = undef;
 is( $b->have_compiler, 0, "have_compiler: fake missing cc" );
+$b->{have_compiler} = undef;
+is( $b->have_cplusplus, 0, "have_cplusplus: fake missing c++" );
 
 # test found compiler
+$b->{config}{cc} = $run_perl;
+$b->{config}{ld} = $run_perl;
 $b->{have_compiler} = undef;
-$b->{config}{cc} = "$perl -e1 --";
-$b->{config}{ld} = "$perl -e1 --";
 is( $b->have_compiler, 1, "have_compiler: fake present cc" );
+$b->{have_compiler} = undef;
+is( $b->have_cplusplus, 1, "have_cpp_compiler: fake present c++" );
 
-
+# test missing cpp compiler
index 1e55f6a..76ab28c 100644 (file)
@@ -2,7 +2,7 @@
 
 use strict;
 use Test::More;
-BEGIN { 
+BEGIN {
   if ($^O eq 'VMS') {
     # So we can get the return value of system()
     require vmsish;
@@ -26,7 +26,7 @@ elsif ( ! $b->have_compiler ) {
   plan skip_all => "no compiler available for testing";
 }
 else {
-  plan tests => 7;
+  plan tests => 8;
 }
 
 ok $b, "created EU::CB object";
@@ -47,13 +47,14 @@ ok -e $object_file, "found object file";
 
 # Link
 SKIP: {
-  skip "error compiling source", 3
+  skip "error compiling source", 4
     unless -e $object_file;
 
   my @temps;
   eval { ($exe_file, @temps) = $b->link_executable(objects => $object_file) };
   is $@, q{}, "no exception from linking";
   ok -e $exe_file, "found executable file";
+  ok -x $exe_file, "executable file appears to be executable";
 
   if ($^O eq 'os2') {          # Analogue of LDLOADPATH...
           # Actually, not needed now, since we do not link with the generated DLL
@@ -65,9 +66,9 @@ SKIP: {
 
   # Try the executable
   my $ec = my_system($exe_file);
-  is $ec, 11, "got expected exit code from executable"
-    or print( $? == -1 ? "# Could not run '$exe_file'\n" 
-                      : "# Unexpected exit code '$ec'\n");
+  is( $ec, 11, "got expected exit code from executable" )
+    or diag( $ec == -1 ? "Could not run '$exe_file': $!\n"
+                       : "Unexpected exit code '$ec'\n");
 }
 
 # Clean up
@@ -83,8 +84,10 @@ if ($^O eq 'VMS') {
 
 sub my_system {
   my $cmd = shift;
+  my $ec;
   if ($^O eq 'VMS') {
-    return system("mcr $cmd");
+    $ec = system("mcr $cmd");
   }
-  return system($cmd) >> 8;
+  $ec = system($cmd);
+  return $ec == -1 ? -1 : $ec >> 8;
 }
diff --git a/cpan/ExtUtils-CBuilder/t/03-cplusplus.t b/cpan/ExtUtils-CBuilder/t/03-cplusplus.t
new file mode 100644 (file)
index 0000000..4e13381
--- /dev/null
@@ -0,0 +1,64 @@
+#! perl -w
+
+use strict;
+use Test::More;
+BEGIN { 
+  if ($^O eq 'VMS') {
+    # So we can get the return value of system()
+    require vmsish;
+    import vmsish;
+  }
+}
+use ExtUtils::CBuilder;
+use File::Spec;
+
+# TEST doesn't like extraneous output
+my $quiet = $ENV{PERL_CORE} && !$ENV{HARNESS_ACTIVE};
+my ($source_file, $object_file, $lib_file);
+
+my $b = ExtUtils::CBuilder->new(quiet => $quiet);
+
+# test plan
+if ( ! $b->have_cplusplus ) {
+  plan skip_all => "no compiler available for testing";
+}
+else {
+  plan tests => 7;
+}
+
+ok $b, "created EU::CB object";
+
+ok $b->have_cplusplus, "have_cplusplus";
+
+$source_file = File::Spec->catfile('t', 'compilet.cc');
+{
+  local *FH;
+  open FH, "> $source_file" or die "Can't create $source_file: $!";
+  print FH "class Bogus { public: int boot_compilet() { return 1; } };\n";
+  close FH;
+}
+ok -e $source_file, "source file '$source_file' created";
+
+$object_file = $b->object_file($source_file);
+ok 1;
+
+is $object_file, $b->compile(source => $source_file, 'C++' => 1);
+
+$lib_file = $b->lib_file($object_file);
+ok 1;
+
+my ($lib, @temps) = $b->link(objects => $object_file,
+                             module_name => 'compilet');
+$lib =~ tr/"'//d;
+is $lib_file, $lib;
+
+for ($source_file, $object_file, $lib_file) {
+  tr/"'//d;
+  1 while unlink;
+}
+
+if ($^O eq 'VMS') {
+   1 while unlink 'COMPILET.LIS';
+   1 while unlink 'COMPILET.OPT';
+}
+
index 4affe86..850a7b6 100644 (file)
@@ -18,7 +18,7 @@ BEGIN {
                         $FIND_VERSION $ERROR $CHECK_INC_HASH];
     use Exporter;
     @ISA            = qw[Exporter];
-    $VERSION        = '0.32';
+    $VERSION        = '0.34';
     $VERBOSE        = 0;
     $DEPRECATED     = 0;
     $FIND_VERSION   = 1;
index 50df9a5..212eaa1 100644 (file)
-\r
-\r
-=head1 NAME\r
-\r
-haiku-iso2022jp -- a test Japanese document in iso-2022-jp\r
-\r
-=head1 DESCRIPTION\r
-\r
-=encoding iso-2022-jp\r
-\r
-This is a test Pod document in ISO-2202-JP.  Its content is some\r
-Japanese haiku by famous poets.\r
-\r
-\r
-=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=head1 AS A LIST\r
-\r
-=over\r
-\r
-=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=back\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+
+=head1 NAME
+
+haiku-iso2022jp -- a test Japanese document in iso-2022-jp
+
+=head1 DESCRIPTION
+
+=encoding iso-2022-jp
+
+This is a test Pod document in ISO-2202-JP.  Its content is some
+Japanese haiku by famous poets.
+
+
+=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=head1 AS A LIST
+
+=over
+
+=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=back
+
+[end]
+
+=cut
+
+
index 105bc8b..fb25310 100644 (file)
-\r
-\r
-=head1 NAME\r
-\r
-haiku-iso2022jp -- a test Japanese document in iso-2022-jp\r
-\r
-=head1 DESCRIPTION\r
-\r
-=encoding iso-2022-jp\r
-\r
-This is a test Pod document in ISO-2202-JP.  Its content is some\r
-Japanese haiku by famous poets.\r
-\r
-\r
-=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=head1 AS A LIST\r
-\r
-=over\r
-\r
-=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=back\r
-\r
-.end.\r
-\r
-=cut\r
-\r
-\r
+
+
+=head1 NAME
+
+haiku-iso2022jp -- a test Japanese document in iso-2022-jp
+
+=head1 DESCRIPTION
+
+=encoding iso-2022-jp
+
+This is a test Pod document in ISO-2202-JP.  Its content is some
+Japanese haiku by famous poets.
+
+
+=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=head1 AS A LIST
+
+=over
+
+=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=back
+
+.end.
+
+=cut
+
+
index 391ee97..dbfcc4e 100644 (file)
-\r
-=head1 NAME\r
-\r
-haiku-iso2022jp -- a test Japanese document in iso-2022-jp\r
-\r
-=head1 DESCRIPTION\r
-\r
-=encoding iso-2022-jp\r
-\r
-This is a test Pod document in ISO-2202-JP.  Its content is some\r
-Japanese haiku by famous poets.\r
-\r
-\r
-=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=head1 AS A LIST\r
-\r
-=over\r
-\r
-=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :\r
-\r
-\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-(furuike ya / kawazu tobikomu / mizu no oto)\r
-\r
-As verbatim:\r
-\r
-  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B\r
-\r
-\r
-\r
-=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)\r
-\r
-\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-(ho hachiri / amagumo yosenu / botan kana)\r
-\r
-As verbatim:\r
-\r
-  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B\r
-\r
-=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)\r
-\r
-\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-(ichihatsu no / ichirin shiroshi / haruno kure)\r
-\r
-As verbatim:\r
-\r
-  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B\r
-\r
-\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-(yomei / ikubakuka aru / yo mijikashi)\r
-\r
-  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B\r
-\r
-=back\r
-\r
-"end"\r
-\r
-=cut\r
-\r
-\r
-\r
+
+=head1 NAME
+
+haiku-iso2022jp -- a test Japanese document in iso-2022-jp
+
+=head1 DESCRIPTION
+
+=encoding iso-2022-jp
+
+This is a test Pod document in ISO-2202-JP.  Its content is some
+Japanese haiku by famous poets.
+
+
+=head2 MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=head2 YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=head2 MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=head1 AS A LIST
+
+=over
+
+=item MATSUO BASHO (\e$B>>HxGN>V\e(B 1644 - 1694) :
+
+\e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+(furuike ya / kawazu tobikomu / mizu no oto)
+
+As verbatim:
+
+  \e$B8ECS$d3?$H$S9~$`?e$N2;\e(B
+
+
+
+=item YOSA BUSON (\e$BM?<UIsB<\e(B1716 - 1783)
+
+\e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+(ho hachiri / amagumo yosenu / botan kana)
+
+As verbatim:
+
+  \e$BJ}H,N$1+1@$h$;$L24C0$+$J\e(B
+
+=item MASAOKA SHIKI (\e$B@52,;R5,\e(B 1867 - 1902)
+
+\e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+(ichihatsu no / ichirin shiroshi / haruno kure)
+
+As verbatim:
+
+  \e$B$$$A$O$D$N0lNXGr$7=U$NJk\e(B
+
+\e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+(yomei / ikubakuka aru / yo mijikashi)
+
+  \e$BM>L?$$$/$P$/$+$"$kLkC;$7\e(B
+
+=back
+
+"end"
+
+=cut
+
+
+
index 230fd2b..4bbd2f2 100644 (file)
@@ -1,14 +1,14 @@
-\r
-=head1 NAME\r
-\r
-haiku-iso2022jp -- a test Japanese document in iso-2022-jp\r
-\r
-=head1 DESCRIPTION\r
-\r
-=encoding iso-2022-jp\r
-\r
-This is a test Pod document in ISO-2202-JP.\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+haiku-iso2022jp -- a test Japanese document in iso-2022-jp
+
+=head1 DESCRIPTION
+
+=encoding iso-2022-jp
+
+This is a test Pod document in ISO-2202-JP.
+
+=cut
+
+
index 9a79bc0..a9bae47 100644 (file)
@@ -1,39 +1,39 @@
-\r
-=head1 NAME\r
-\r
-buniya1256 -- test document: a paragraph in Arabic as CP-1256\r
-\r
-=head1 DESCRIPTION\r
-\r
-This Pod document is a paragraph in Arabic from "The Five Pillars of Islam"\r
-as CP-1256.\r
-\r
-=encoding cp1256\r
-\r
-æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:\r
-\r
-ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå\r
-\r
-ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ\r
-\r
-ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.\r
-\r
-And now as a real single paragraph:\r
-\r
-æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:\r
-ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå\r
-ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ\r
-ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.\r
-\r
-And now as a verbatim paragraph:\r
-\r
-  æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:\r
-  ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå\r
-  ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ\r
-  ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+buniya1256 -- test document: a paragraph in Arabic as CP-1256
+
+=head1 DESCRIPTION
+
+This Pod document is a paragraph in Arabic from "The Five Pillars of Islam"
+as CP-1256.
+
+=encoding cp1256
+
+æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:
+
+ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå
+
+ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ
+
+ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.
+
+And now as a real single paragraph:
+
+æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:
+ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå
+ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ
+ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.
+
+And now as a verbatim paragraph:
+
+  æÚä ÚãÇÑÉ Èä ÍÒã ÞÇá ÞÇá ÑÓæá Çááå Õáì Çááå Úáíå æÓáã:
+  ÇÑÈÚ ÝÑÖåä Çááå ÚÒ æÌá Ýí ÇáÇÓáÇã Ýãä ÌÇÁ ÈËáÇË áã íÛäíä Úäå
+  ÔíÆÇ ÍÊì íÃÊí Èåä ÌãíÚÇ ÇáÕáÇÉ æÇáÒßÇÉ æÕíÇã ÑãÖÇä æÍÌ
+  ÇáÈíÊ. ÑæÇå ÇÍãÏ æÇáØÈÑÇäí Ýí ÇáßÈíÑ æÝí ÇÓäÇÏå ÇÈä áåíÚÉ.
+
+[end]
+
+=cut
+
+
index 51b8320..deae5f4 100644 (file)
@@ -1,22 +1,22 @@
-\r
-We have deliberately contradictory =encoding statements here.\r
-This should generate errata.\r
-\r
-=encoding koi8-r\r
-\r
-=head1 NAME\r
-\r
-ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"\r
-\r
-=head1 TEXT\r
-\r
-=encoding Shift-JIS\r
-\r
-(This is a test Pod pocument in KOI8-R.)\r
-\r
-15 ÆÅ×ÒÁÌÑ 1887\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+We have deliberately contradictory =encoding statements here.
+This should generate errata.
+
+=encoding koi8-r
+
+=head1 NAME
+
+ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"
+
+=head1 TEXT
+
+=encoding Shift-JIS
+
+(This is a test Pod pocument in KOI8-R.)
+
+15 ÆÅ×ÒÁÌÑ 1887
+
+[end]
+
+=cut
+
index 92e95eb..616168a 100644 (file)
@@ -1,56 +1,56 @@
-\r
-We have deliberately reduntant =encoding statements here.\r
-This should generate no errata.\r
-\r
-=encoding koi8-r\r
-\r
-=head1 NAME\r
-\r
-ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"\r
-\r
-=head1 TEXT\r
-\r
-(This is a test Pod pocument in KOI8-R.)\r
-\r
-ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ, /\r
-çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ /\r
-é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,- /\r
-      îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?\r
-      \r
-ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï, /\r
-÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ, /\r
-÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï /\r
-      ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.\r
-      \r
-é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ, /\r
-÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,- /\r
-õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ: /\r
-     ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!\r
-\r
-15 ÆÅ×ÒÁÌÑ 1887\r
-\r
-And now, as a verbatim section:\r
-\r
-  ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ,\r
-  çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ\r
-  é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,-\r
-        îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?\r
-        \r
-  ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï,\r
-  ÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ,\r
-  ÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï\r
-        ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.\r
-\r
-=encoding koi8-r\r
-\r
-  é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ,\r
-  ÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,-\r
-  õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ:\r
-       ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!\r
-  \r
-    15 ÆÅ×ÒÁÌÑ 1887\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+We have deliberately reduntant =encoding statements here.
+This should generate no errata.
+
+=encoding koi8-r
+
+=head1 NAME
+
+ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"
+
+=head1 TEXT
+
+(This is a test Pod pocument in KOI8-R.)
+
+ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ, /
+çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ /
+é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,- /
+      îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?
+      
+ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï, /
+÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ, /
+÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï /
+      ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.
+      
+é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ, /
+÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,- /
+õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ: /
+     ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!
+
+15 ÆÅ×ÒÁÌÑ 1887
+
+And now, as a verbatim section:
+
+  ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ,
+  çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ
+  é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,-
+        îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?
+        
+  ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï,
+  ÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ,
+  ÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï
+        ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.
+
+=encoding koi8-r
+
+  é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ,
+  ÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,-
+  õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ:
+       ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!
+  
+    15 ÆÅ×ÒÁÌÑ 1887
+
+[end]
+
+=cut
+
index 0152bd3..e9fdaa1 100644 (file)
@@ -1,39 +1,39 @@
-\r
-=head1 NAME\r
-\r
-buniya-iso-6 -- test document: a paragraph in Arabic as ISO-8859-6\r
-\r
-=head1 DESCRIPTION\r
-\r
-This document is a paragraph in Arabic from "The Five Pillars of Islam"\r
-as ISO-8859-6.\r
-\r
-=encoding iso-8859-6\r
-\r
-èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:\r
-\r
-ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç\r
-\r
-ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ\r
-\r
-ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. \r
-\r
-And now as a real single paragraph:\r
-\r
-èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:\r
-ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç\r
-ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ\r
-ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. \r
-\r
-And now as a verbatim paragraph:\r
-\r
-  èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:\r
-  ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç\r
-  ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ\r
-  ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. \r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+buniya-iso-6 -- test document: a paragraph in Arabic as ISO-8859-6
+
+=head1 DESCRIPTION
+
+This document is a paragraph in Arabic from "The Five Pillars of Islam"
+as ISO-8859-6.
+
+=encoding iso-8859-6
+
+èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:
+
+ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç
+
+ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ
+
+ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. 
+
+And now as a real single paragraph:
+
+èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:
+ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç
+ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ
+ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. 
+
+And now as a verbatim paragraph:
+
+  èÙæ ÙåÇÑÉ Èæ ÍÒå âÇä âÇä ÑÓèä Çääç Õäé Çääç Ùäêç èÓäå:
+  ÇÑÈÙ áÑÖçæ Çääç ÙÒ èÌä áê ÇäÇÓäÇå áåæ ÌÇÁ ÈËäÇË äå êÚæêæ Ùæç
+  ÔêÆÇ ÍÊé êÃÊê Èçæ ÌåêÙÇ ÇäÕäÇÉ èÇäÒãÇÉ èÕêÇå ÑåÖÇæ èÍÌ
+  ÇäÈêÊ. ÑèÇç ÇÍåÏ èÇä×ÈÑÇæê áê ÇäãÈêÑ èáê ÇÓæÇÏç ÇÈæ äçêÙÉ. 
+
+[end]
+
+=cut
+
+
index ce314e4..c15d742 100644 (file)
@@ -1,51 +1,51 @@
-\r
-=encoding koi8-r\r
-\r
-=head1 NAME\r
-\r
-ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"\r
-\r
-=head1 TEXT\r
-\r
-(This is a test Pod pocument in KOI8-R.)\r
-\r
-ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ, /\r
-çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ /\r
-é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,- /\r
-      îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?\r
-      \r
-ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï, /\r
-÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ, /\r
-÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï /\r
-      ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.\r
-      \r
-é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ, /\r
-÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,- /\r
-õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ: /\r
-     ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!\r
-\r
-15 ÆÅ×ÒÁÌÑ 1887\r
-\r
-And now, as a verbatim section:\r
-\r
-  ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ,\r
-  çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ\r
-  é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,-\r
-        îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?\r
-        \r
-  ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï,\r
-  ÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ,\r
-  ÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï\r
-        ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.\r
-        \r
-  é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ,\r
-  ÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,-\r
-  õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ:\r
-       ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!\r
-  \r
-    15 ÆÅ×ÒÁÌÑ 1887\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=encoding koi8-r
+
+=head1 NAME
+
+ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ -- Fet's "When you were reading"
+
+=head1 TEXT
+
+(This is a test Pod pocument in KOI8-R.)
+
+ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ, /
+çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ /
+é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,- /
+      îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?
+      
+ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï, /
+÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ, /
+÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï /
+      ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.
+      
+é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ, /
+÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,- /
+õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ: /
+     ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!
+
+15 ÆÅ×ÒÁÌÑ 1887
+
+And now, as a verbatim section:
+
+  ëÏÇÄÁ ÞÉÔÁÌÁ ÔÙ ÍÕÞÉÔÅÌØÎÙÅ ÓÔÒÏËÉ,
+  çÄÅ ÓÅÒÄÃÁ Ú×ÕÞÎÙÊ ÐÙÌ ÓÉÑÎØÅ ÌØÅÔ ËÒÕÇÏÍ
+  é ÓÔÒÁÓÔÉ ÒÏËÏ×ÏÊ ×ÚÄÙÍÁÀÔÓÑ ÐÏÔÏËÉ,-
+        îÅ ×ÓÐÏÍÎÉÌÁ ÌØ Ï ÞÅÍ?
+        
+  ñ ×ÅÒÉÔØ ÎÅ ÈÏÞÕ! ëÏÇÄÁ × ÓÔÅÐÉ, ËÁË ÄÉ×Ï,
+  ÷ ÐÏÌÎÏÞÎÏÊ ÔÅÍÎÏÔÅ ÂÅÚ×ÒÅÍÅÎÎÏ ÇÏÒÑ,
+  ÷ÄÁÌÉ ÐÅÒÅÄ ÔÏÂÏÊ ÐÒÏÚÒÁÞÎÏ É ËÒÁÓÉ×Ï
+        ÷ÓÔÁ×ÁÌÁ ×ÄÒÕÇÚÁÒÑ.
+        
+  é × ÜÔÕ ËÒÁÓÏÔÕ ÎÅ×ÏÌØÎÏ ×ÚÏÒ ÔÑÎÕÌÏ,
+  ÷ ÔÏÔ ×ÅÌÉÞÁ×ÙÊ ÂÌÅÓË ÚÁ ÔÅÍÎÙÊ ×ÅÓØ ÐÒÅÄÅÌ,-
+  õÖÅÌØ ÎÉÞÔÏ ÔÅÂÅ × ÔÏ ×ÒÅÍÑ ÎÅ ÛÅÐÎÕÌÏ:
+       ôÁÍ ÞÅÌÏ×ÅË ÓÇÏÒÅÌ!
+  
+    15 ÆÅ×ÒÁÌÑ 1887
+
+[end]
+
+=cut
+
index efd01ee..9eb43b0 100644 (file)
@@ -1,37 +1,37 @@
-=encoding big5\r
-\r
-=head1 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test\r
-\r
-¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-\r
-¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-¬G¥h©¼¨ú¦¹¡C\r
-\r
-And as a verbatim section:\r
-\r
-  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-  ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-  ¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-  ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-  \r
-  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-  ¬G¥h©¼¨ú¦¹¡C\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+=encoding big5
+
+=head1 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test
+
+¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+
+¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+¬G¥h©¼¨ú¦¹¡C
+
+And as a verbatim section:
+
+  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+  ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+  ¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+  ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+  
+  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+  ¬G¥h©¼¨ú¦¹¡C
+
+[end]
+
+=cut
+
+
index 8193d21..d796a43 100644 (file)
@@ -1,37 +1,37 @@
-=encoding big5-eten\r
-\r
-=head1 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test\r
-\r
-¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-\r
-¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-¬G¥h©¼¨ú¦¹¡C\r
-\r
-And as a verbatim section:\r
-\r
-  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-  ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-  ¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-  ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-  \r
-  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-  ¬G¥h©¼¨ú¦¹¡C\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+=encoding big5-eten
+
+=head1 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test
+
+¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+
+¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+¬G¥h©¼¨ú¦¹¡C
+
+And as a verbatim section:
+
+  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+  ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+  ¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+  ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+  
+  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+  ¬G¥h©¼¨ú¦¹¡C
+
+[end]
+
+=cut
+
+
index 477c785..d48b032 100644 (file)
@@ -1,46 +1,46 @@
-\r
-=encoding big5\r
-\r
-=head1 NAME\r
-\r
-¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in the Big5 encoding. Its content is\r
-the 38th canto from the I<Dao De Jing>.\r
-\r
-=head2 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹\r
-\r
-¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-\r
-¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-¬G¥h©¼¨ú¦¹¡C\r
-\r
-And as a verbatim section:\r
-\r
-  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q\r
-   ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C\r
-  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q\r
-   ¤U¼wµL¬°¦Ó¦³¥H¬°¡C\r
-  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q\r
-   ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C\r
-  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C\r
-  \r
-  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C\r
-  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C\r
-  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C\r
-  ¬G¥h©¼¨ú¦¹¡C\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=encoding big5
+
+=head1 NAME
+
+¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹ -- Big5 (Chinese) encoding test
+
+=head1 DESCRIPTION
+
+This is a test Pod document in the Big5 encoding. Its content is
+the 38th canto from the I<Dao De Jing>.
+
+=head2 ¦Ñ¤l¹D¼w¸g¡@¤T¤Q¤K³¹
+
+¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+
+¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+«eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+¬G¥h©¼¨ú¦¹¡C
+
+And as a verbatim section:
+
+  ¤W¼w¤£¼w¡A¬O¥H¦³¼w¡Q
+   ¤U¼w¤£¥¢¼w¡A¬O¥HµL¼w¡C
+  ¤W¼wµL¬°¦ÓµL¥H¬°¡Q
+   ¤U¼wµL¬°¦Ó¦³¥H¬°¡C
+  ¤W¤¯¬°¤§¦ÓµL¥H¬°¡Q
+   ¤W¸q¬°¤§¦Ó¦³¥H¬°¡C
+  ¤W§¬°¤§¦Ó²ö¤§À³¡A«hÄcÁu¦Ó¥µ¤§¡C
+  
+  ¬G¥¢¹D¦Ó¦Z¼w¡A¥¢¼w¦Ó¦Z¤¯¡A¥¢¤¯¦Ó¦Z¸q¡A¥¢¸q¦Ó¦Z§¡C¤Ò§ªÌ¡A©¾«H¤§Á¡¡A¦Ó¶Ã¤§­º¡C
+  «eÃѪ̡A¹D¤§µØ¡A¦Ó·M¤§©l¡C
+  ¬O¥H¤j¤V¤Ò©~¨ä«p¡A¤£©~¨äÁ¡¡Q©~¨ä¹ê¡A¤£©~¨äµØ¡C
+  ¬G¥h©¼¨ú¦¹¡C
+
+[end]
+
+=cut
+
index 19f53e1..130ce11 100644 (file)
@@ -1,38 +1,38 @@
-\r
-=encoding iso-8859-1\r
-\r
-=head1 NAME\r
-\r
-French-Latin-1 -- explicitly Latin-1 test document in French\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in Latin-1. Its content is the last two\r
-paragraphs of Baudelaire's I<Le Joujou du pauvre>.\r
-\r
-A travers ces barreaux symboliques séparant deux mondes, la grande route\r
-et le château, l'enfant pauvre montrait à l'enfant riche son propre\r
-joujou, que celui-ci examinait avidement comme un objet rare et inconnu.\r
-Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans\r
-une boîte grillée, c'était un rat vivantE<160>! Les parents, par économie\r
-sans doute, avaient tiré le joujou de la vie elle-même. \r
-\r
-Et les deux enfants se riaient l'un à l'autre fraternellement, avec des\r
-dents d'une I<égale> blancheur.\r
-\r
-=head2 As Verbatim\r
-\r
- A travers ces barreaux symboliques séparant deux mondes, la grande route\r
- et le château, l'enfant pauvre montrait à l'enfant riche son propre\r
- joujou, que celui-ci examinait avidement comme un objet rare et inconnu.\r
- Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans\r
- une boîte grillée, c'était un rat vivant !  Les parents, par économie\r
- sans doute, avaient tiré le joujou de la vie elle-même. \r
-\r
- Et les deux enfants se riaient l'un à l'autre fraternellement, avec des\r
- dents d'une égale blancheur.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=encoding iso-8859-1
+
+=head1 NAME
+
+French-Latin-1 -- explicitly Latin-1 test document in French
+
+=head1 DESCRIPTION
+
+This is a test Pod document in Latin-1. Its content is the last two
+paragraphs of Baudelaire's I<Le Joujou du pauvre>.
+
+A travers ces barreaux symboliques séparant deux mondes, la grande route
+et le château, l'enfant pauvre montrait à l'enfant riche son propre
+joujou, que celui-ci examinait avidement comme un objet rare et inconnu.
+Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans
+une boîte grillée, c'était un rat vivantE<160>! Les parents, par économie
+sans doute, avaient tiré le joujou de la vie elle-même. 
+
+Et les deux enfants se riaient l'un à l'autre fraternellement, avec des
+dents d'une I<égale> blancheur.
+
+=head2 As Verbatim
+
+ A travers ces barreaux symboliques séparant deux mondes, la grande route
+ et le château, l'enfant pauvre montrait à l'enfant riche son propre
+ joujou, que celui-ci examinait avidement comme un objet rare et inconnu.
+ Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans
+ une boîte grillée, c'était un rat vivant !  Les parents, par économie
+ sans doute, avaient tiré le joujou de la vie elle-même. 
+
+ Et les deux enfants se riaient l'un à l'autre fraternellement, avec des
+ dents d'une égale blancheur.
+
+[end]
+
+=cut
+
index 4708368..9b25221 100644 (file)
@@ -1,36 +1,36 @@
-\r
-=head1 NAME\r
-\r
-French-Latin-1 -- implicitly Latin-1 test document in French\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in Latin-1. Its content is the last two\r
-paragraphs of Baudelaire's I<Le Joujou du pauvre>.\r
-\r
-A travers ces barreaux symboliques séparant deux mondes, la grande route\r
-et le château, l'enfant pauvre montrait à l'enfant riche son propre\r
-joujou, que celui-ci examinait avidement comme un objet rare et inconnu.\r
-Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans\r
-une boîte grillée, c'était un rat vivantE<160>! Les parents, par économie\r
-sans doute, avaient tiré le joujou de la vie elle-même. \r
-\r
-Et les deux enfants se riaient l'un à l'autre fraternellement, avec des\r
-dents d'une I<égale> blancheur.\r
-\r
-=head2 As Verbatim\r
-\r
- A travers ces barreaux symboliques séparant deux mondes, la grande route\r
- et le château, l'enfant pauvre montrait à l'enfant riche son propre\r
- joujou, que celui-ci examinait avidement comme un objet rare et inconnu.\r
- Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans\r
- une boîte grillée, c'était un rat vivant !  Les parents, par économie\r
- sans doute, avaient tiré le joujou de la vie elle-même. \r
-\r
- Et les deux enfants se riaient l'un à l'autre fraternellement, avec des\r
- dents d'une égale blancheur.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=head1 NAME
+
+French-Latin-1 -- implicitly Latin-1 test document in French
+
+=head1 DESCRIPTION
+
+This is a test Pod document in Latin-1. Its content is the last two
+paragraphs of Baudelaire's I<Le Joujou du pauvre>.
+
+A travers ces barreaux symboliques séparant deux mondes, la grande route
+et le château, l'enfant pauvre montrait à l'enfant riche son propre
+joujou, que celui-ci examinait avidement comme un objet rare et inconnu.
+Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans
+une boîte grillée, c'était un rat vivantE<160>! Les parents, par économie
+sans doute, avaient tiré le joujou de la vie elle-même. 
+
+Et les deux enfants se riaient l'un à l'autre fraternellement, avec des
+dents d'une I<égale> blancheur.
+
+=head2 As Verbatim
+
+ A travers ces barreaux symboliques séparant deux mondes, la grande route
+ et le château, l'enfant pauvre montrait à l'enfant riche son propre
+ joujou, que celui-ci examinait avidement comme un objet rare et inconnu.
+ Or, ce joujou, que le petit souillon agaçait, agitait et secouait dans
+ une boîte grillée, c'était un rat vivant !  Les parents, par économie
+ sans doute, avaient tiré le joujou de la vie elle-même. 
+
+ Et les deux enfants se riaient l'un à l'autre fraternellement, avec des
+ dents d'une égale blancheur.
+
+[end]
+
+=cut
+
index 7d6fc0a..57a3f9c 100644 (file)
@@ -1,11 +1,11 @@
-=encoding blorpy\r
-\r
-=head1 nonesuch -- Document in an unknown encoding\r
-\r
-Blorp.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+=encoding blorpy
+
+=head1 nonesuch -- Document in an unknown encoding
+
+Blorp.
+
+[end]
+
+=cut
+
+
index 4d8f7a0..5d28ce8 100644 (file)
-\r
-=encoding cp1251\r
-\r
-=head1 NAME\r
-\r
-Çèìíÿÿ íî÷ü -- Pasternak Russian test file (cp1251)\r
-\r
-=head1 TEXT\r
-\r
-(This is a test Pod pocument in cp1251.)\r
-\r
-Çèìíÿÿ íî÷ü.\r
-\r
-Ìåëî, ìåëî ïî âñåé çåìëå /\r
-Âî âñå ïðåäåëû. /\r
-Ñâå÷à ãîðåëà íà ñòîëå, /\r
-Ñâå÷à ãîðåëà.\r
-\r
-Êàê ëåòîì ðîåì ìîøêîðà /\r
-Ëåòèò íà ïëàìÿ, /\r
-Ñëåòàëèñü õëîïüÿ ñî äâîðà /\r
-Ê îêîííîé ðàìå.\r
-\r
-Ìåòåëü ëåïèëà íà ñòîëå /\r
-Êðóæêè è ñòðåëû. /\r
-Ñâå÷à ãîðåëà íà ñòîëå, /\r
-Ñâå÷à ãîðåëà.\r
-\r
-Íà îçàðåííûé ïîòîëîê /\r
-Ëîæèëèñü òåíè, /\r
-Ñêðåùåíüÿ ðóê, ñêðêùåíüÿ íîã, /\r
-Ñóäüáû ñêðåùåíüÿ.\r
-\r
-È ïàäàëè äâà áàøìà÷êà /\r
-Ñî ñòóêîì íà ïîë, /\r
-È âîñê ñëåçàìè ñ íî÷íèêà /\r
-Íà ïëàòüå êàïàë.\r
-\r
-È âñå òåðÿëîñü â ñíåæíîé ìãëå /\r
-Ñåäîé è áåëîé. /\r
-Ñâå÷à ãîðåëà íà ñòîëå, /\r
-Ñâå÷à ãîðåëà.\r
-\r
-Íà ñâå÷êó äóëî èç óãëà, /\r
-È æàð ñîáëàçíà /\r
-Âçäûìàë, êàê àíãåë, äâà êðûëà /\r
-Êðåñòîîáðàçíî. /\r
-\r
-Ìåëî âåñü ìåñÿö â ôåâðàëå, /\r
-È òî è äåëî /\r
-Ñâå÷à ãîðåëà íà ñòîëå, /\r
-Ñâå÷à ãîðåëà.\r
-\r
--- Áîðèñ Ïàñòåðíàê, 1946\r
-\r
-\r
-=head2 As Preformatted\r
-\r
-And now as a preformatted section:\r
-\r
-  Çèìíÿÿ íî÷ü.\r
-\r
-  Ìåëî, ìåëî ïî âñåé çåìëå\r
-  Âî âñå ïðåäåëû.\r
-  Ñâå÷à ãîðåëà íà ñòîëå,\r
-  Ñâå÷à ãîðåëà.\r
-\r
-  Êàê ëåòîì ðîåì ìîøêîðà\r
-  Ëåòèò íà ïëàìÿ,\r
-  Ñëåòàëèñü õëîïüÿ ñî äâîðà\r
-  Ê îêîííîé ðàìå.\r
-\r
-  Ìåòåëü ëåïèëà íà ñòîëå\r
-  Êðóæêè è ñòðåëû.\r
-  Ñâå÷à ãîðåëà íà ñòîëå,\r
-  Ñâå÷à ãîðåëà.\r
-\r
-  Íà îçàðåííûé ïîòîëîê\r
-  Ëîæèëèñü òåíè,\r
-  Ñêðåùåíüÿ ðóê, ñêðêùåíüÿ íîã,\r
-  Ñóäüáû ñêðåùåíüÿ.\r
-\r
-  È ïàäàëè äâà áàøìà÷êà\r
-  Ñî ñòóêîì íà ïîë,\r
-  È âîñê ñëåçàìè ñ íî÷íèêà\r
-  Íà ïëàòüå êàïàë.\r
-\r
-  È âñå òåðÿëîñü â ñíåæíîé ìãëå\r
-  Ñåäîé è áåëîé.\r
-  Ñâå÷à ãîðåëà íà ñòîëå,\r
-  Ñâå÷à ãîðåëà.\r
-\r
-  Íà ñâå÷êó äóëî èç óãëà,\r
-  È æàð ñîáëàçíà\r
-  Âçäûìàë, êàê àíãåë, äâà êðûëà\r
-  Êðåñòîîáðàçíî.\r
-\r
-  Ìåëî âåñü ìåñÿö â ôåâðàëå,\r
-  È òî è äåëî\r
-  Ñâå÷à ãîðåëà íà ñòîëå,\r
-  Ñâå÷à ãîðåëà.\r
-\r
-  -- Áîðèñ Ïàñòåðíàê, 1946\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=encoding cp1251
+
+=head1 NAME
+
+Çèìíÿÿ íî÷ü -- Pasternak Russian test file (cp1251)
+
+=head1 TEXT
+
+(This is a test Pod pocument in cp1251.)
+
+Çèìíÿÿ íî÷ü.
+
+Ìåëî, ìåëî ïî âñåé çåìëå /
+Âî âñå ïðåäåëû. /
+Ñâå÷à ãîðåëà íà ñòîëå, /
+Ñâå÷à ãîðåëà.
+
+Êàê ëåòîì ðîåì ìîøêîðà /
+Ëåòèò íà ïëàìÿ, /
+Ñëåòàëèñü õëîïüÿ ñî äâîðà /
+Ê îêîííîé ðàìå.
+
+Ìåòåëü ëåïèëà íà ñòîëå /
+Êðóæêè è ñòðåëû. /
+Ñâå÷à ãîðåëà íà ñòîëå, /
+Ñâå÷à ãîðåëà.
+
+Íà îçàðåííûé ïîòîëîê /
+Ëîæèëèñü òåíè, /
+Ñêðåùåíüÿ ðóê, ñêðêùåíüÿ íîã, /
+Ñóäüáû ñêðåùåíüÿ.
+
+È ïàäàëè äâà áàøìà÷êà /
+Ñî ñòóêîì íà ïîë, /
+È âîñê ñëåçàìè ñ íî÷íèêà /
+Íà ïëàòüå êàïàë.
+
+È âñå òåðÿëîñü â ñíåæíîé ìãëå /
+Ñåäîé è áåëîé. /
+Ñâå÷à ãîðåëà íà ñòîëå, /
+Ñâå÷à ãîðåëà.
+
+Íà ñâå÷êó äóëî èç óãëà, /
+È æàð ñîáëàçíà /
+Âçäûìàë, êàê àíãåë, äâà êðûëà /
+Êðåñòîîáðàçíî. /
+
+Ìåëî âåñü ìåñÿö â ôåâðàëå, /
+È òî è äåëî /
+Ñâå÷à ãîðåëà íà ñòîëå, /
+Ñâå÷à ãîðåëà.
+
+-- Áîðèñ Ïàñòåðíàê, 1946
+
+
+=head2 As Preformatted
+
+And now as a preformatted section:
+
+  Çèìíÿÿ íî÷ü.
+
+  Ìåëî, ìåëî ïî âñåé çåìëå
+  Âî âñå ïðåäåëû.
+  Ñâå÷à ãîðåëà íà ñòîëå,
+  Ñâå÷à ãîðåëà.
+
+  Êàê ëåòîì ðîåì ìîøêîðà
+  Ëåòèò íà ïëàìÿ,
+  Ñëåòàëèñü õëîïüÿ ñî äâîðà
+  Ê îêîííîé ðàìå.
+
+  Ìåòåëü ëåïèëà íà ñòîëå
+  Êðóæêè è ñòðåëû.
+  Ñâå÷à ãîðåëà íà ñòîëå,
+  Ñâå÷à ãîðåëà.
+
+  Íà îçàðåííûé ïîòîëîê
+  Ëîæèëèñü òåíè,
+  Ñêðåùåíüÿ ðóê, ñêðêùåíüÿ íîã,
+  Ñóäüáû ñêðåùåíüÿ.
+
+  È ïàäàëè äâà áàøìà÷êà
+  Ñî ñòóêîì íà ïîë,
+  È âîñê ñëåçàìè ñ íî÷íèêà
+  Íà ïëàòüå êàïàë.
+
+  È âñå òåðÿëîñü â ñíåæíîé ìãëå
+  Ñåäîé è áåëîé.
+  Ñâå÷à ãîðåëà íà ñòîëå,
+  Ñâå÷à ãîðåëà.
+
+  Íà ñâå÷êó äóëî èç óãëà,
+  È æàð ñîáëàçíà
+  Âçäûìàë, êàê àíãåë, äâà êðûëà
+  Êðåñòîîáðàçíî.
+
+  Ìåëî âåñü ìåñÿö â ôåâðàëå,
+  È òî è äåëî
+  Ñâå÷à ãîðåëà íà ñòîëå,
+  Ñâå÷à ãîðåëà.
+
+  -- Áîðèñ Ïàñòåðíàê, 1946
+
+[end]
+
+=cut
+
index 4b7d7d9..081aaac 100644 (file)
@@ -1,20 +1,20 @@
-\r
-=head1 NAME\r
-\r
-simple_text_document -- an implicitly US-ASCII test document.\r
-\r
-=head1 TEXT\r
-\r
-The quick brown fox jumps over the lazy dog.\r
-\r
-Military Intelligence Yukon rhosts penrep Weekly World News DSD Time\r
-Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP\r
-\r
-CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage\r
-KGB ^? 737 1080H 1080H Satellite imagery smuggle\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+simple_text_document -- an implicitly US-ASCII test document.
+
+=head1 TEXT
+
+The quick brown fox jumps over the lazy dog.
+
+Military Intelligence Yukon rhosts penrep Weekly World News DSD Time
+Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP
+
+CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage
+KGB ^? 737 1080H 1080H Satellite imagery smuggle
+
+[end]
+
+=cut
+
+
index a465ac2..0e8f6c5 100644 (file)
@@ -1,22 +1,22 @@
-\r
-=encoding ascii\r
-\r
-=head1 NAME\r
-\r
-simple_text_document -- an explicitly US-ASCII test document.\r
-\r
-=head1 TEXT\r
-\r
-The quick brown fox jumps over the lazy dog.\r
-\r
-Military Intelligence Yukon rhosts penrep Weekly World News DSD Time\r
-Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP\r
-\r
-CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage\r
-KGB ^? 737 1080H 1080H Satellite imagery smuggle\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=encoding ascii
+
+=head1 NAME
+
+simple_text_document -- an explicitly US-ASCII test document.
+
+=head1 TEXT
+
+The quick brown fox jumps over the lazy dog.
+
+Military Intelligence Yukon rhosts penrep Weekly World News DSD Time
+Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP
+
+CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage
+KGB ^? 737 1080H 1080H Satellite imagery smuggle
+
+[end]
+
+=cut
+
+
index 4d185bb..8be2ed6 100644 (file)
@@ -1,24 +1,24 @@
-\r
-#Doesn't actually use any of the Latin-1 bytes.\r
-\r
-=encoding iso-8859-1\r
-\r
-=head1 NAME\r
-\r
-simple_text_document -- an explicitly Latin-1 (ASCII subset) test document\r
-\r
-=head1 TEXT\r
-\r
-The quick brown fox jumps over the lazy dog.\r
-\r
-Military Intelligence Yukon rhosts penrep Weekly World News DSD Time\r
-Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP\r
-\r
-CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage\r
-KGB ^? 737 1080H 1080H Satellite imagery smuggle\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+#Doesn't actually use any of the Latin-1 bytes.
+
+=encoding iso-8859-1
+
+=head1 NAME
+
+simple_text_document -- an explicitly Latin-1 (ASCII subset) test document
+
+=head1 TEXT
+
+The quick brown fox jumps over the lazy dog.
+
+Military Intelligence Yukon rhosts penrep Weekly World News DSD Time
+Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP
+
+CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage
+KGB ^? 737 1080H 1080H Satellite imagery smuggle
+
+[end]
+
+=cut
+
+
index f3e6932..e454d4f 100644 (file)
@@ -1,24 +1,24 @@
-\r
-#Doesn't actually use any of the utf8 bytes.\r
-\r
-=encoding utf8\r
-\r
-=head1 NAME\r
-\r
-simple_text_document -- an explicitly UTF8 (ASCII subset) test document\r
-\r
-=head1 TEXT\r
-\r
-The quick brown fox jumps over the lazy dog.\r
-\r
-Military Intelligence Yukon rhosts penrep Weekly World News DSD Time\r
-Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP\r
-\r
-CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage\r
-KGB ^? 737 1080H 1080H Satellite imagery smuggle\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+#Doesn't actually use any of the utf8 bytes.
+
+=encoding utf8
+
+=head1 NAME
+
+simple_text_document -- an explicitly UTF8 (ASCII subset) test document
+
+=head1 TEXT
+
+The quick brown fox jumps over the lazy dog.
+
+Military Intelligence Yukon rhosts penrep Weekly World News DSD Time
+Cohiba finks rail gun DF ~ Corporate Security NATOA CCS DEVGRP
+
+CONUS Khaddafi NATIA data havens Spetznaz afsatcom BOP Semtex garbage
+KGB ^? 737 1080H 1080H Satellite imagery smuggle
+
+[end]
+
+=cut
+
+
index 969f8ba..32c763e 100644 (file)
@@ -1,69 +1,69 @@
-\r
-=encoding utf8\r
-\r
-=head1 NAME\r
-\r
-WŚRÓD NOCNEJ CISZY -- explicitly utf8 test document in Polish\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in UTF8.  Its content is the lyrics to\r
-the Polish Christmas carol "Wśród nocnej ciszy".\r
-\r
-Wśród nocnej ciszy głos się rozchodzi: /\r
-Wstańcie, pasterze, Bóg się nam rodzi! /\r
-Czym prędzej się wybierajcie, /\r
-Do Betlejem pospieszajcie /\r
-Przywitać Pana.\r
-\r
-Poszli, znaleźli Dzieciątko w żłobie /\r
-Z wszystkimi znaki danymi sobie. /\r
-Jako Bogu cześć Mu dali, /\r
-A witając zawołali /\r
-Z wielkiej radości:\r
-\r
-Ach, witaj Zbawco z dawno żądany, /\r
-Wiele tysięcy lat wyglądany /\r
-Na Ciebie króle, prorocy /\r
-Czekali, a Tyś tej nocy /\r
-Nam się objawił.\r
-\r
-I my czekamy na Ciebie, Pana, /\r
-A skoro przyjdziesz na głos kapłana, /\r
-Padniemy na twarz przed Tobą, /\r
-Wierząc, żeś jest pod osłoną /\r
-Chleba i wina.\r
-\r
-=head2 As Verbatim\r
-\r
-And now as verbatim text:\r
-\r
-  Wśród nocnej ciszy głos się rozchodzi:\r
-  Wstańcie, pasterze, Bóg się nam rodzi!\r
-  Czym prędzej się wybierajcie,\r
-  Do Betlejem pospieszajcie\r
-  Przywitać Pana.\r
-\r
-  Poszli, znaleźli Dzieciątko w żłobie\r
-  Z wszystkimi znaki danymi sobie.\r
-  Jako Bogu cześć Mu dali,\r
-  A witając zawołali\r
-  Z wielkiej radości:\r
-\r
-  Ach, witaj Zbawco z dawno żądany,\r
-  Wiele tysięcy lat wyglądany\r
-  Na Ciebie króle, prorocy\r
-  Czekali, a Tyś tej nocy\r
-  Nam się objawił.\r
-\r
-  I my czekamy na Ciebie, Pana,\r
-  A skoro przyjdziesz na głos kapłana,\r
-  Padniemy na twarz przed Tobą,\r
-  Wierząc, żeś jest pod osłoną\r
-  Chleba i wina.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=encoding utf8
+
+=head1 NAME
+
+WŚRÓD NOCNEJ CISZY -- explicitly utf8 test document in Polish
+
+=head1 DESCRIPTION
+
+This is a test Pod document in UTF8.  Its content is the lyrics to
+the Polish Christmas carol "Wśród nocnej ciszy".
+
+Wśród nocnej ciszy głos się rozchodzi: /
+Wstańcie, pasterze, Bóg się nam rodzi! /
+Czym prędzej się wybierajcie, /
+Do Betlejem pospieszajcie /
+Przywitać Pana.
+
+Poszli, znaleźli Dzieciątko w żłobie /
+Z wszystkimi znaki danymi sobie. /
+Jako Bogu cześć Mu dali, /
+A witając zawołali /
+Z wielkiej radości:
+
+Ach, witaj Zbawco z dawno żądany, /
+Wiele tysięcy lat wyglądany /
+Na Ciebie króle, prorocy /
+Czekali, a Tyś tej nocy /
+Nam się objawił.
+
+I my czekamy na Ciebie, Pana, /
+A skoro przyjdziesz na głos kapłana, /
+Padniemy na twarz przed Tobą, /
+Wierząc, żeś jest pod osłoną /
+Chleba i wina.
+
+=head2 As Verbatim
+
+And now as verbatim text:
+
+  Wśród nocnej ciszy głos się rozchodzi:
+  Wstańcie, pasterze, Bóg się nam rodzi!
+  Czym prędzej się wybierajcie,
+  Do Betlejem pospieszajcie
+  Przywitać Pana.
+
+  Poszli, znaleźli Dzieciątko w żłobie
+  Z wszystkimi znaki danymi sobie.
+  Jako Bogu cześć Mu dali,
+  A witając zawołali
+  Z wielkiej radości:
+
+  Ach, witaj Zbawco z dawno żądany,
+  Wiele tysięcy lat wyglądany
+  Na Ciebie króle, prorocy
+  Czekali, a Tyś tej nocy
+  Nam się objawił.
+
+  I my czekamy na Ciebie, Pana,
+  A skoro przyjdziesz na głos kapłana,
+  Padniemy na twarz przed Tobą,
+  Wierząc, żeś jest pod osłoną
+  Chleba i wina.
+
+[end]
+
+=cut
+
+
index d495734..101b582 100644 (file)
@@ -1,48 +1,48 @@
-\r
-=encoding shiftjis\r
-\r
-=head1 NAME\r
-\r
-\8c^\94ÔS2763 -- test document in Shift-JIS\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in Shift-JIS.  Its content is\r
-some uninteresting product specs I found on the Net.\r
-\r
-It's an textitem list:\r
-\r
-=over\r
-\r
-=item \8c^\94Ô\r
-\r
-S2763\r
-\r
-=item \8cõ\8c¹\r
-\r
-GZ4 \83_\83C\83N\83\8d\83C\83b\83N\83~\83\89\81[\83\89\83\93\83v 12V 10W\81~1\r
-\r
-=item \90¡\96@\r
-\r
-\8d\82\81E295 \95\9d\81E365 \89\9c\81E76mm\r
-\r
-=item \8e¿\97Ê\r
-\r
-8.0kg\r
-\r
-=item \8dÞ\8e¿\r
-\r
-\8e÷\8e\89\81@\83A\83\8b\83~\81A\83A\83\8b\83}\83C\83g\8ed\8fã\81@\83K\83\89\83\r
-\r
-=item \89¿\8ai\r
-\r
-76,000\89~\81i\83\89\83\93\83v\81E\83g\83\89\83\93\83X\8d\9e\82Ý\81j\r
-\r
-=back\r
-\r
-2001\94N10\8c\8e3\93ú\81i\90\85\81j\94­\94\84\8aJ\8en\r
-\r
-[end]\r
-\r
-=cut\r
-\r
+
+=encoding shiftjis
+
+=head1 NAME
+
+\8c^\94ÔS2763 -- test document in Shift-JIS
+
+=head1 DESCRIPTION
+
+This is a test Pod document in Shift-JIS.  Its content is
+some uninteresting product specs I found on the Net.
+
+It's an textitem list:
+
+=over
+
+=item \8c^\94Ô
+
+S2763
+
+=item \8cõ\8c¹
+
+GZ4 \83_\83C\83N\83\8d\83C\83b\83N\83~\83\89\81[\83\89\83\93\83v 12V 10W\81~1
+
+=item \90¡\96@
+
+\8d\82\81E295 \95\9d\81E365 \89\9c\81E76mm
+
+=item \8e¿\97Ê
+
+8.0kg
+
+=item \8dÞ\8e¿
+
+\8e÷\8e\89\81@\83A\83\8b\83~\81A\83A\83\8b\83}\83C\83g\8ed\8fã\81@\83K\83\89\83
+
+=item \89¿\8ai
+
+76,000\89~\81i\83\89\83\93\83v\81E\83g\83\89\83\93\83X\8d\9e\82Ý\81j
+
+=back
+
+2001\94N10\8c\8e3\93ú\81i\90\85\81j\94­\94\84\8aJ\8en
+
+[end]
+
+=cut
+
index 9fdcdab..79e1bf0 100644 (file)
@@ -1,64 +1,64 @@
-\r
-=head1 NAME\r
-\r
-Khun::Thong::Dang -- a test Thai document in ISO-8859-11\r
-\r
-=head1 DESCRIPTION\r
-\r
-=encoding iso-8859-11\r
-\r
-This is a test Pod document in ISO-8859-11. Its content is a poem to (by?)\r
-Khun Thong Dang (ÀÒ¾ÁÔè§Á§¤Å), the pet of Bhumibol, the King of\r
-Thailand.\r
-\r
-As four flowed paragraphs:\r
-\r
-ï ¾ÃÐàÁµµÒá¨èÁ¨Ñºã¨ä¼·ÊÂÒÁ /\r
-¾ÃзѧÒÁ...ÁͧÀÒ¾¶èÒÂÁÔ¶èÒ¶͹ /\r
-à¡ÅéÒÏ ¹éÍÁà¡ÅéÒÏ ¾¨¹ìàÃÕ§༴Õ§¡Å͹ /\r
-Ê×èÍÊзé͹¾ÃСÒÃسÂìÍØ蹴ǧÁÒ¹ú\r
-\r
-ï ·Ø¡ÀÒ¾ÁÔè§Á§¤ÅÂÅáÅéÇÂÔéÁ /\r
-àÍ×éÍÍ¡ÍÔèÁÅéÓ¤èÒÁËÒÈÒÅ /\r
-ÍÂÒ¡à»ç¹¤Ø³·Í§á´§¹Ñ¡¨Ñ¡ÍÂÙè§Ò¹ /\r
-à½éÒ¤ÅÍà¤ÅÕº·ÁÒÅÂì¾ÃÐÀÙÁÔ¾Åú\r
-\r
-ï ¾ÃÐËѵ¶ìºØ­·Ã§àºÔ¡ËÅéÒ¾ÅÔ¡ËÅéÒà¢ÕÂÇ /\r
-¾ÃÐâÍÉ°ìàÃÕÂǵÃÑÊËéÒÁʧ¤ÃÒÁ©Å /\r
-¾ÃзÑ ¸ âÍÀÒʼèͧ¶èͧʡŠ/\r
-¾ÃÐÂؤźҷÂèÒ§Ê׺ÊÃéÒ§ä·Âú\r
-\r
-ï ¹éÍÁà¡ÅéÒà·Ô´Í§¤ìÃҪѹÈÃѹÂìÈÃÕ /\r
-ºÒÃÁÕËÁ×蹤Ù褧Íʧä¢Â /\r
-¡ÃôÔÃÒª¡ÄɮҡéͧËÅéÒä¡Å /\r
-»Å×éÁ»ÃзѺ¶éǹ·Ø¡ã¨áËè§ä·éàÍÂúÐû\r
-\r
-=head2 Verbatim Section\r
-\r
-And as a verbatim section:\r
-\r
-    ï ¾ÃÐàÁµµÒá¨èÁ¨Ñºã¨ä¼·ÊÂÒÁ\r
-    ¾ÃзѧÒÁ...ÁͧÀÒ¾¶èÒÂÁÔ¶èÒ¶͹\r
-    à¡ÅéÒÏ ¹éÍÁà¡ÅéÒÏ ¾¨¹ìàÃÕ§༴Õ§¡Å͹\r
-    Ê×èÍÊзé͹¾ÃСÒÃسÂìÍØ蹴ǧÁÒ¹ú\r
-\r
-    ï ·Ø¡ÀÒ¾ÁÔè§Á§¤ÅÂÅáÅéÇÂÔéÁ\r
-    àÍ×éÍÍ¡ÍÔèÁÅéÓ¤èÒÁËÒÈÒÅ\r
-    ÍÂÒ¡à»ç¹¤Ø³·Í§á´§¹Ñ¡¨Ñ¡ÍÂÙè§Ò¹\r
-    à½éÒ¤ÅÍà¤ÅÕº·ÁÒÅÂì¾ÃÐÀÙÁÔ¾Åú\r
-\r
-    ï ¾ÃÐËѵ¶ìºØ­·Ã§àºÔ¡ËÅéÒ¾ÅÔ¡ËÅéÒà¢ÕÂÇ\r
-    ¾ÃÐâÍÉ°ìàÃÕÂǵÃÑÊËéÒÁʧ¤ÃÒÁ©Å\r
-    ¾ÃзÑ ¸ âÍÀÒʼèͧ¶èͧʡÅ\r
-    ¾ÃÐÂؤźҷÂèÒ§Ê׺ÊÃéÒ§ä·Âú\r
-\r
-    ï ¹éÍÁà¡ÅéÒà·Ô´Í§¤ìÃҪѹÈÃѹÂìÈÃÕ\r
-    ºÒÃÁÕËÁ×蹤Ù褧Íʧä¢Â\r
-    ¡ÃôÔÃÒª¡ÄɮҡéͧËÅéÒä¡Å\r
-    »Å×éÁ»ÃзѺ¶éǹ·Ø¡ã¨áËè§ä·éàÍÂúÐû\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+Khun::Thong::Dang -- a test Thai document in ISO-8859-11
+
+=head1 DESCRIPTION
+
+=encoding iso-8859-11
+
+This is a test Pod document in ISO-8859-11. Its content is a poem to (by?)
+Khun Thong Dang (ÀÒ¾ÁÔè§Á§¤Å), the pet of Bhumibol, the King of
+Thailand.
+
+As four flowed paragraphs:
+
+ï ¾ÃÐàÁµµÒá¨èÁ¨Ñºã¨ä¼·ÊÂÒÁ /
+¾ÃзѧÒÁ...ÁͧÀÒ¾¶èÒÂÁÔ¶èÒ¶͹ /
+à¡ÅéÒÏ ¹éÍÁà¡ÅéÒÏ ¾¨¹ìàÃÕ§༴Õ§¡Å͹ /
+Ê×èÍÊзé͹¾ÃСÒÃسÂìÍØ蹴ǧÁÒ¹ú
+
+ï ·Ø¡ÀÒ¾ÁÔè§Á§¤ÅÂÅáÅéÇÂÔéÁ /
+àÍ×éÍÍ¡ÍÔèÁÅéÓ¤èÒÁËÒÈÒÅ /
+ÍÂÒ¡à»ç¹¤Ø³·Í§á´§¹Ñ¡¨Ñ¡ÍÂÙè§Ò¹ /
+à½éÒ¤ÅÍà¤ÅÕº·ÁÒÅÂì¾ÃÐÀÙÁÔ¾Åú
+
+ï ¾ÃÐËѵ¶ìºØ­·Ã§àºÔ¡ËÅéÒ¾ÅÔ¡ËÅéÒà¢ÕÂÇ /
+¾ÃÐâÍÉ°ìàÃÕÂǵÃÑÊËéÒÁʧ¤ÃÒÁ©Å /
+¾ÃзÑ ¸ âÍÀÒʼèͧ¶èͧʡŠ/
+¾ÃÐÂؤźҷÂèÒ§Ê׺ÊÃéÒ§ä·Âú
+
+ï ¹éÍÁà¡ÅéÒà·Ô´Í§¤ìÃҪѹÈÃѹÂìÈÃÕ /
+ºÒÃÁÕËÁ×蹤Ù褧Íʧä¢Â /
+¡ÃôÔÃÒª¡ÄɮҡéͧËÅéÒä¡Å /
+»Å×éÁ»ÃзѺ¶éǹ·Ø¡ã¨áËè§ä·éàÍÂúÐû
+
+=head2 Verbatim Section
+
+And as a verbatim section:
+
+    ï ¾ÃÐàÁµµÒá¨èÁ¨Ñºã¨ä¼·ÊÂÒÁ
+    ¾ÃзѧÒÁ...ÁͧÀÒ¾¶èÒÂÁÔ¶èÒ¶͹
+    à¡ÅéÒÏ ¹éÍÁà¡ÅéÒÏ ¾¨¹ìàÃÕ§༴Õ§¡Å͹
+    Ê×èÍÊзé͹¾ÃСÒÃسÂìÍØ蹴ǧÁÒ¹ú
+
+    ï ·Ø¡ÀÒ¾ÁÔè§Á§¤ÅÂÅáÅéÇÂÔéÁ
+    àÍ×éÍÍ¡ÍÔèÁÅéÓ¤èÒÁËÒÈÒÅ
+    ÍÂÒ¡à»ç¹¤Ø³·Í§á´§¹Ñ¡¨Ñ¡ÍÂÙè§Ò¹
+    à½éÒ¤ÅÍà¤ÅÕº·ÁÒÅÂì¾ÃÐÀÙÁÔ¾Åú
+
+    ï ¾ÃÐËѵ¶ìºØ­·Ã§àºÔ¡ËÅéÒ¾ÅÔ¡ËÅéÒà¢ÕÂÇ
+    ¾ÃÐâÍÉ°ìàÃÕÂǵÃÑÊËéÒÁʧ¤ÃÒÁ©Å
+    ¾ÃзÑ ¸ âÍÀÒʼèͧ¶èͧʡÅ
+    ¾ÃÐÂؤźҷÂèÒ§Ê׺ÊÃéÒ§ä·Âú
+
+    ï ¹éÍÁà¡ÅéÒà·Ô´Í§¤ìÃҪѹÈÃѹÂìÈÃÕ
+    ºÒÃÁÕËÁ×蹤Ù褧Íʧä¢Â
+    ¡ÃôÔÃÒª¡ÄɮҡéͧËÅéÒä¡Å
+    »Å×éÁ»ÃзѺ¶éǹ·Ø¡ã¨áËè§ä·éàÍÂúÐû
+
+[end]
+
+=cut
+
+
index d15a122..53f46de 100644 (file)
@@ -1,67 +1,67 @@
-\r
-=head1 NAME\r
-\r
-WŚRÓD NOCNEJ CISZY -- implicitly utf8 test document in Polish\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in UTF8.  Its content is the lyrics to\r
-the Polish Christmas carol "Wśród nocnej ciszy".\r
-\r
-Wśród nocnej ciszy głos się rozchodzi: /\r
-Wstańcie, pasterze, Bóg się nam rodzi! /\r
-Czym prędzej się wybierajcie, /\r
-Do Betlejem pospieszajcie /\r
-Przywitać Pana.\r
-\r
-Poszli, znaleźli Dzieciątko w żłobie /\r
-Z wszystkimi znaki danymi sobie. /\r
-Jako Bogu cześć Mu dali, /\r
-A witając zawołali /\r
-Z wielkiej radości:\r
-\r
-Ach, witaj Zbawco z dawno żądany, /\r
-Wiele tysięcy lat wyglądany /\r
-Na Ciebie króle, prorocy /\r
-Czekali, a Tyś tej nocy /\r
-Nam się objawił.\r
-\r
-I my czekamy na Ciebie, Pana, /\r
-A skoro przyjdziesz na głos kapłana, /\r
-Padniemy na twarz przed Tobą, /\r
-Wierząc, żeś jest pod osłoną /\r
-Chleba i wina.\r
-\r
-=head2 As Verbatim\r
-\r
-And now as verbatim text:\r
-\r
-  Wśród nocnej ciszy głos się rozchodzi:\r
-  Wstańcie, pasterze, Bóg się nam rodzi!\r
-  Czym prędzej się wybierajcie,\r
-  Do Betlejem pospieszajcie\r
-  Przywitać Pana.\r
-\r
-  Poszli, znaleźli Dzieciątko w żłobie\r
-  Z wszystkimi znaki danymi sobie.\r
-  Jako Bogu cześć Mu dali,\r
-  A witając zawołali\r
-  Z wielkiej radości:\r
-\r
-  Ach, witaj Zbawco z dawno żądany,\r
-  Wiele tysięcy lat wyglądany\r
-  Na Ciebie króle, prorocy\r
-  Czekali, a Tyś tej nocy\r
-  Nam się objawił.\r
-\r
-  I my czekamy na Ciebie, Pana,\r
-  A skoro przyjdziesz na głos kapłana,\r
-  Padniemy na twarz przed Tobą,\r
-  Wierząc, żeś jest pod osłoną\r
-  Chleba i wina.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+
+=head1 NAME
+
+WŚRÓD NOCNEJ CISZY -- implicitly utf8 test document in Polish
+
+=head1 DESCRIPTION
+
+This is a test Pod document in UTF8.  Its content is the lyrics to
+the Polish Christmas carol "Wśród nocnej ciszy".
+
+Wśród nocnej ciszy głos się rozchodzi: /
+Wstańcie, pasterze, Bóg się nam rodzi! /
+Czym prędzej się wybierajcie, /
+Do Betlejem pospieszajcie /
+Przywitać Pana.
+
+Poszli, znaleźli Dzieciątko w żłobie /
+Z wszystkimi znaki danymi sobie. /
+Jako Bogu cześć Mu dali, /
+A witając zawołali /
+Z wielkiej radości:
+
+Ach, witaj Zbawco z dawno żądany, /
+Wiele tysięcy lat wyglądany /
+Na Ciebie króle, prorocy /
+Czekali, a Tyś tej nocy /
+Nam się objawił.
+
+I my czekamy na Ciebie, Pana, /
+A skoro przyjdziesz na głos kapłana, /
+Padniemy na twarz przed Tobą, /
+Wierząc, żeś jest pod osłoną /
+Chleba i wina.
+
+=head2 As Verbatim
+
+And now as verbatim text:
+
+  Wśród nocnej ciszy głos się rozchodzi:
+  Wstańcie, pasterze, Bóg się nam rodzi!
+  Czym prędzej się wybierajcie,
+  Do Betlejem pospieszajcie
+  Przywitać Pana.
+
+  Poszli, znaleźli Dzieciątko w żłobie
+  Z wszystkimi znaki danymi sobie.
+  Jako Bogu cześć Mu dali,
+  A witając zawołali
+  Z wielkiej radości:
+
+  Ach, witaj Zbawco z dawno żądany,
+  Wiele tysięcy lat wyglądany
+  Na Ciebie króle, prorocy
+  Czekali, a Tyś tej nocy
+  Nam się objawił.
+
+  I my czekamy na Ciebie, Pana,
+  A skoro przyjdziesz na głos kapłana,
+  Padniemy na twarz przed Tobą,
+  Wierząc, żeś jest pod osłoną
+  Chleba i wina.
+
+[end]
+
+=cut
+
+
index 20b0410..5ecc7a6 100644 (file)
@@ -1,67 +1,67 @@
-=head1 NAME\r
-\r
-\r
-WŚRÓD NOCNEJ CISZY -- implicitly utf8 test document in Polish\r
-\r
-=head1 DESCRIPTION\r
-\r
-This is a test Pod document in UTF8.  Its content is the lyrics to\r
-the Polish Christmas carol "Wśród nocnej ciszy".\r
-\r
-Wśród nocnej ciszy głos się rozchodzi: /\r
-Wstańcie, pasterze, Bóg się nam rodzi! /\r
-Czym prędzej się wybierajcie, /\r
-Do Betlejem pospieszajcie /\r
-Przywitać Pana.\r
-\r
-Poszli, znaleźli Dzieciątko w żłobie /\r
-Z wszystkimi znaki danymi sobie. /\r
-Jako Bogu cześć Mu dali, /\r
-A witając zawołali /\r
-Z wielkiej radości:\r
-\r
-Ach, witaj Zbawco z dawno żądany, /\r
-Wiele tysięcy lat wyglądany /\r
-Na Ciebie króle, prorocy /\r
-Czekali, a Tyś tej nocy /\r
-Nam się objawił.\r
-\r
-I my czekamy na Ciebie, Pana, /\r
-A skoro przyjdziesz na głos kapłana, /\r
-Padniemy na twarz przed Tobą, /\r
-Wierząc, żeś jest pod osłoną /\r
-Chleba i wina.\r
-\r
-=head2 As Verbatim\r
-\r
-And now as verbatim text:\r
-\r
-  Wśród nocnej ciszy głos się rozchodzi:\r
-  Wstańcie, pasterze, Bóg się nam rodzi!\r
-  Czym prędzej się wybierajcie,\r
-  Do Betlejem pospieszajcie\r
-  Przywitać Pana.\r
-\r
-  Poszli, znaleźli Dzieciątko w żłobie\r
-  Z wszystkimi znaki danymi sobie.\r
-  Jako Bogu cześć Mu dali,\r
-  A witając zawołali\r
-  Z wielkiej radości:\r
-\r
-  Ach, witaj Zbawco z dawno żądany,\r
-  Wiele tysięcy lat wyglądany\r
-  Na Ciebie króle, prorocy\r
-  Czekali, a Tyś tej nocy\r
-  Nam się objawił.\r
-\r
-  I my czekamy na Ciebie, Pana,\r
-  A skoro przyjdziesz na głos kapłana,\r
-  Padniemy na twarz przed Tobą,\r
-  Wierząc, żeś jest pod osłoną\r
-  Chleba i wina.\r
-\r
-[end]\r
-\r
-=cut\r
-\r
-\r
+=head1 NAME
+
+
+WŚRÓD NOCNEJ CISZY -- implicitly utf8 test document in Polish
+
+=head1 DESCRIPTION
+
+This is a test Pod document in UTF8.  Its content is the lyrics to
+the Polish Christmas carol "Wśród nocnej ciszy".
+
+Wśród nocnej ciszy głos się rozchodzi: /
+Wstańcie, pasterze, Bóg się nam rodzi! /
+Czym prędzej się wybierajcie, /
+Do Betlejem pospieszajcie /
+Przywitać Pana.
+
+Poszli, znaleźli Dzieciątko w żłobie /
+Z wszystkimi znaki danymi sobie. /
+Jako Bogu cześć Mu dali, /
+A witając zawołali /
+Z wielkiej radości:
+
+Ach, witaj Zbawco z dawno żądany, /
+Wiele tysięcy lat wyglądany /
+Na Ciebie króle, prorocy /
+Czekali, a Tyś tej nocy /
+Nam się objawił.
+
+I my czekamy na Ciebie, Pana, /
+A skoro przyjdziesz na głos kapłana, /
+Padniemy na twarz przed Tobą, /
+Wierząc, żeś jest pod osłoną /
+Chleba i wina.
+
+=head2 As Verbatim
+
+And now as verbatim text:
+
+  Wśród nocnej ciszy głos się rozchodzi:
+  Wstańcie, pasterze, Bóg się nam rodzi!
+  Czym prędzej się wybierajcie,
+  Do Betlejem pospieszajcie
+  Przywitać Pana.
+
+  Poszli, znaleźli Dzieciątko w żłobie
+  Z wszystkimi znaki danymi sobie.
+  Jako Bogu cześć Mu dali,
+  A witając zawołali
+  Z wielkiej radości:
+
+  Ach, witaj Zbawco z dawno żądany,
+  Wiele tysięcy lat wyglądany
+  Na Ciebie króle, prorocy
+  Czekali, a Tyś tej nocy
+  Nam się objawił.
+
+  I my czekamy na Ciebie, Pana,
+  A skoro przyjdziesz na głos kapłana,
+  Padniemy na twarz przed Tobą,
+  Wierząc, żeś jest pod osłoną
+  Chleba i wina.
+
+[end]
+
+=cut
+
+
index c9c92f9..12879fc 100644 (file)
@@ -17,7 +17,7 @@ BEGIN {
     require feature;
     feature->import(':5.10');
 }
-use Test::More tests => 78;
+use Test::More tests => 81;
 use Config ();
 
 use B::Deparse;
@@ -591,3 +591,15 @@ foreach (0..3) {
        print ++$x, "\n";
     }
 }
+####
+my $pi = 4;
+####
+no warnings;
+my $pi := 4;
+>>>>
+no warnings;
+my $pi = 4;
+####
+my $pi : = 4;
+>>>>
+my $pi = 4;
index f385f55..5d97c85 100644 (file)
@@ -46,6 +46,7 @@ repair()
      -e 's=cwd=Cwd=' \
      -e 's=perlio/via=PerlIO/via=' \
      -e 's=perlio/encoding=PerlIO/encoding=' \
+     -e 's=xs/apitest/keywordrpn=XS/APItest/KeywordRPN=' \
      -e 's=xs/apitest=XS/APItest=' \
      -e 's=xs/typemap=XS/Typemap=' \
      -e 's=unicode/normaliz=Unicode/Normalize=' \
diff --git a/doop.c b/doop.c
index d3c49b5..3a5967d 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -1467,8 +1467,7 @@ Perl_do_kv(pTHX)
            }
            LvTYPE(TARG) = 'k';
            if (LvTARG(TARG) != (const SV *)keys) {
-               if (LvTARG(TARG))
-                   SvREFCNT_dec(LvTARG(TARG));
+               SvREFCNT_dec(LvTARG(TARG));
                LvTARG(TARG) = SvREFCNT_inc_simple(keys);
            }
            PUSHs(TARG);
index 090b243..493f9c9 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -218,7 +218,7 @@ Afp |OP*    |die            |NULLOK const char* pat|...
 s      |OP*    |vdie           |NULLOK const char* pat|NULLOK va_list* args
 #endif
 : Used in util.c
-p      |OP*    |die_where      |NULLOK const char* message|STRLEN msglen
+pr     |void   |die_where      |NULLOK SV* msv
 Ap     |void   |dounwind       |I32 cxix
 : FIXME
 pmb    |bool   |do_aexec       |NULLOK SV* really|NN SV** mark|NN SV** sp
@@ -745,7 +745,7 @@ pd  |PADOFFSET|pad_alloc    |I32 optype|U32 tmptype
 : Used in toke.c and perly.y
 p      |PADOFFSET|allocmy      |NN const char *const name
 : Used in op.c and toke.c
-pdR    |PADOFFSET|pad_findmy   |NN const char* name
+EXpdR  |PADOFFSET|pad_findmy   |NN const char* name
 Ap     |PADOFFSET|find_rundefsvoffset  |
 : Used in perly.y
 pR     |OP*    |oopsAV         |NN OP* o
@@ -800,7 +800,7 @@ Apd |void   |packlist       |NN SV *cat|NN const char *pat|NN const char *patend|NN SV
 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
 s      |void   |pidgone        |Pid_t pid|int status
 #endif
-Ap     |void   |pmflag         |NN U32* pmfl|int ch
+DUXpo  |void   |pmflag         |NN U32 *pmfl|int ch
 : Used in perly.y
 p      |OP*    |pmruntime      |NN OP *o|NN OP *expr|bool isreg
 #if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
@@ -1189,7 +1189,7 @@ Ap        |void   |vwarner        |U32 err|NN const char* pat|NULLOK va_list* args
 p      |void   |watch          |NN char** addr
 Ap     |I32    |whichsig       |NN const char* sig
 : Used in pp_ctl.c
-p      |void   |write_to_stderr|NN const char* message|int msglen
+p      |void   |write_to_stderr|NN SV* msv
 : Used in op.c
 p      |int    |yyerror        |NN const char *const s
 : Used in perly.y, and by Data::Alias
@@ -1846,10 +1846,8 @@ s        |char*  |stdize_locale  |NN char* locs
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 s      |const COP*|closest_cop |NN const COP *cop|NULLOK const OP *o
 s      |SV*    |mess_alloc
-s      |const char *|vdie_croak_common|NULLOK const char *pat|NULLOK va_list *args \
-                               |NULLOK STRLEN *msglen|NULLOK I32* utf8
-s      |bool   |vdie_common    |NULLOK const char *message|STRLEN msglen\
-                               |I32 utf8|bool warn
+s      |SV *|vdie_croak_common|NULLOK const char *pat|NULLOK va_list *args
+s      |bool   |vdie_common    |NULLOK SV *message|bool warn
 sr     |char * |write_no_mem
 #if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL)
 sn     |void   |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
@@ -2230,6 +2228,8 @@ ApoM      |const char *|fetch_cop_label|NULLOK struct refcounted_he *const chain \
 xpoM   |struct refcounted_he *|store_cop_label \
                |NULLOK struct refcounted_he *const chain|NN const char *label
 
+xpo    |int    |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
+
 END_EXTERN_C
 /*
  * ex: set ts=8 sts=4 sw=4 noet:
diff --git a/embed.h b/embed.h
index 49a4b15..9455afc 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define package_version                Perl_package_version
 #define pad_alloc              Perl_pad_alloc
 #define allocmy                        Perl_allocmy
+#endif
+#if defined(PERL_CORE) || defined(PERL_EXT)
 #define pad_findmy             Perl_pad_findmy
 #endif
 #define find_rundefsvoffset    Perl_find_rundefsvoffset
 #define pidgone                        S_pidgone
 #endif
 #endif
-#define pmflag                 Perl_pmflag
 #ifdef PERL_CORE
 #define pmruntime              Perl_pmruntime
 #endif
 #endif
 #endif
 #ifdef PERL_CORE
-#define die_where(a,b)         Perl_die_where(aTHX_ a,b)
+#define die_where(a)           Perl_die_where(aTHX_ a)
 #endif
 #define dounwind(a)            Perl_dounwind(aTHX_ a)
 #ifdef PERL_CORE
 #define package_version(a)     Perl_package_version(aTHX_ a)
 #define pad_alloc(a,b)         Perl_pad_alloc(aTHX_ a,b)
 #define allocmy(a)             Perl_allocmy(aTHX_ a)
+#endif
+#if defined(PERL_CORE) || defined(PERL_EXT)
 #define pad_findmy(a)          Perl_pad_findmy(aTHX_ a)
 #endif
 #define find_rundefsvoffset()  Perl_find_rundefsvoffset(aTHX)
 #define pidgone(a,b)           S_pidgone(aTHX_ a,b)
 #endif
 #endif
-#define pmflag(a,b)            Perl_pmflag(aTHX_ a,b)
 #ifdef PERL_CORE
 #define pmruntime(a,b,c)       Perl_pmruntime(aTHX_ a,b,c)
 #endif
 #endif
 #define whichsig(a)            Perl_whichsig(aTHX_ a)
 #ifdef PERL_CORE
-#define write_to_stderr(a,b)   Perl_write_to_stderr(aTHX_ a,b)
+#define write_to_stderr(a)     Perl_write_to_stderr(aTHX_ a)
 #define yyerror(a)             Perl_yyerror(aTHX_ a)
 #endif
 #if defined(PERL_CORE) || defined(PERL_EXT)
 #ifdef PERL_CORE
 #define closest_cop(a,b)       S_closest_cop(aTHX_ a,b)
 #define mess_alloc()           S_mess_alloc(aTHX)
-#define vdie_croak_common(a,b,c,d)     S_vdie_croak_common(aTHX_ a,b,c,d)
-#define vdie_common(a,b,c,d)   S_vdie_common(aTHX_ a,b,c,d)
+#define vdie_croak_common(a,b) S_vdie_croak_common(aTHX_ a,b)
+#define vdie_common(a,b)       S_vdie_common(aTHX_ a,b)
 #define write_no_mem()         S_write_no_mem(aTHX)
 #endif
 #if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL)
 #endif
 #ifdef PERL_CORE
 #endif
+#ifdef PERL_CORE
+#endif
 #define ck_anoncode(a)         Perl_ck_anoncode(aTHX_ a)
 #define ck_bitop(a)            Perl_ck_bitop(aTHX_ a)
 #define ck_chdir(a)            Perl_ck_chdir(aTHX_ a)
index 9d6d4c3..0ed7d38 100644 (file)
 #define PL_Ginterp_size                (my_vars->Ginterp_size)
 #define PL_interp_size_5_10_0  (my_vars->Ginterp_size_5_10_0)
 #define PL_Ginterp_size_5_10_0 (my_vars->Ginterp_size_5_10_0)
+#define PL_keyword_plugin      (my_vars->Gkeyword_plugin)
+#define PL_Gkeyword_plugin     (my_vars->Gkeyword_plugin)
 #define PL_malloc_mutex                (my_vars->Gmalloc_mutex)
 #define PL_Gmalloc_mutex       (my_vars->Gmalloc_mutex)
 #define PL_mmap_page_size      (my_vars->Gmmap_page_size)
 #define PL_Ghints_mutex                PL_hints_mutex
 #define PL_Ginterp_size                PL_interp_size
 #define PL_Ginterp_size_5_10_0 PL_interp_size_5_10_0
+#define PL_Gkeyword_plugin     PL_keyword_plugin
 #define PL_Gmalloc_mutex       PL_malloc_mutex
 #define PL_Gmmap_page_size     PL_mmap_page_size
 #define PL_Gmy_ctx_mutex       PL_my_ctx_mutex
index 8623a85..57dc276 100644 (file)
@@ -58,6 +58,7 @@ ccsymbols=''
 cf_by='olaf'
 cf_email='o.flebbe@gmx.de'
 cf_time='Dec 2001'
+charbits='8'
 chgrp=''
 chmod=''
 chown=''
diff --git a/ext/XS-APItest-KeywordRPN/KeywordRPN.pm b/ext/XS-APItest-KeywordRPN/KeywordRPN.pm
new file mode 100644 (file)
index 0000000..7b8b8fb
--- /dev/null
@@ -0,0 +1,146 @@
+=head1 NAME
+
+XS::APItest::KeywordRPN - write arithmetic expressions in RPN
+
+=head1 SYNOPSIS
+
+       use XS::APItest::KeywordRPN qw(rpn calcrpn);
+
+       $triangle = rpn($n $n 1 + * 2 /);
+
+       calcrpn $triangle { $n $n 1 + * 2 / }
+
+=head1 DESCRIPTION
+
+This module supplies plugged-in keywords, using the new mechanism in Perl
+5.11.2, that allow arithmetic to be expressed in reverse Polish notation,
+in an otherwise Perl program.  This module has serious limitations and
+is not intended for real use: its purpose is only to test the keyword
+plugin mechanism.  For that purpose it is part of the Perl core source
+distribution, and is not meant to be installed.
+
+=head2 RPN expression syntax
+
+Tokens of an RPN expression may be separated by whitespace, but such
+separation is usually not required.  It is required only where unseparated
+tokens would look like a longer token.  For example, C<12 34 +> can be
+written as C<12 34+>, but not as C<1234 +>.
+
+An RPN expression may be any of:
+
+=over
+
+=item C<1234>
+
+A sequence of digits is an unsigned decimal literal number.
+
+=item C<$foo>
+
+An alphanumeric name preceded by dollar sign refers to a Perl scalar
+variable.  Only variables declared with C<my> or C<state> are supported.
+If the variable's value is not a native integer, it will be converted
+to an integer, by Perl's usual mechanisms, at the time it is evaluated.
+
+=item I<A> I<B> C<+>
+
+Sum of I<A> and I<B>.
+
+=item I<A> I<B> C<->
+
+Difference of I<A> and I<B>, the result of subtracting I<B> from I<A>.
+
+=item I<A> I<B> C<*>
+
+Product of I<A> and I<B>.
+
+=item I<A> I<B> C</>
+
+Quotient when I<A> is divided by I<B>, rounded towards zero.
+Division by zero generates an exception.
+
+=item I<A> I<B> C<%>
+
+Remainder when I<A> is divided by I<B> with the quotient rounded towards zero.
+Division by zero generates an exception.
+
+=back
+
+Because the arithmetic operators all have fixed arity and are postfixed,
+there is no need for operator precedence, nor for a grouping operator
+to override precedence.  This is half of the point of RPN.
+
+An RPN expression can also be interpreted in another way, as a sequence
+of operations on a stack, one operation per token.  A literal or variable
+token pushes a value onto the stack.  A binary operator pulls two items
+off the stack, performs a calculation with them, and pushes the result
+back onto the stack.  The stack starts out empty, and at the end of the
+expression there must be exactly one value left on the stack.
+
+=cut
+
+package XS::APItest::KeywordRPN;
+
+{ use 5.011001; }
+use warnings;
+use strict;
+
+our $VERSION = "0.001";
+
+require XSLoader;
+XSLoader::load(__PACKAGE__, $VERSION);
+
+=head1 OPERATORS
+
+These are the operators being added to the Perl language.
+
+=over
+
+=item rpn(EXPRESSION)
+
+This construct is a Perl expression.  I<EXPRESSION> must be an RPN
+arithmetic expression, as described above.  The RPN expression is
+evaluated, and its value is returned as the value of the Perl expression.
+
+=item calcrpn VARIABLE { EXPRESSION }
+
+This construct is a complete Perl statement.  (No semicolon should
+follow the closing brace.)  I<VARIABLE> must be a Perl scalar C<my>
+variable, and I<EXPRESSION> must be an RPN arithmetic expression as
+described above.  The RPN expression is evaluated, and its value is
+assigned to the variable.
+
+=back
+
+=head1 BUGS
+
+This module only performs arithmetic on native integers, and only a
+small subset of the arithmetic operations that Perl offers.  This is
+due to it being intended only for demonstration and test purposes.
+
+The RPN parser is liable to leak memory when a parse error occurs.
+It doesn't leak on success, however.
+
+The linkage with Perl's lexer is liable to fail when an RPN expression
+is spread across multiple lines.
+
+=head1 SEE ALSO
+
+L<Devel::Declare>,
+L<perlapi/PL_keyword_plugin>
+
+=head1 AUTHOR
+
+Andrew Main (Zefram) <zefram@fysh.org>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009 Andrew Main (Zefram) <zefram@fysh.org>
+
+=head1 LICENSE
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+1;
diff --git a/ext/XS-APItest-KeywordRPN/KeywordRPN.xs b/ext/XS-APItest-KeywordRPN/KeywordRPN.xs
new file mode 100644 (file)
index 0000000..32b6998
--- /dev/null
@@ -0,0 +1,283 @@
+#define PERL_CORE 1   /* for pad_findmy() */
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#define sv_is_glob(sv) (SvTYPE(sv) == SVt_PVGV)
+#define sv_is_regexp(sv) (SvTYPE(sv) == SVt_REGEXP)
+#define sv_is_string(sv) \
+       (!sv_is_glob(sv) && !sv_is_regexp(sv) && \
+        (SvFLAGS(sv) & (SVf_IOK|SVf_NOK|SVf_POK|SVp_IOK|SVp_NOK|SVp_POK)))
+
+static SV *hintkey_rpn_sv, *hintkey_calcrpn_sv;
+static int (*next_keyword_plugin)(pTHX_ char *, STRLEN, OP **);
+
+/* low-level parser helpers */
+
+#define PL_bufptr (PL_parser->bufptr)
+#define PL_bufend (PL_parser->bufend)
+
+static char THX_peek_char(pTHX)
+{
+       if(PL_bufptr == PL_bufend)
+               Perl_croak(aTHX_
+                       "unexpected EOF "
+                       "(or you were unlucky about buffer position, FIXME)");
+       return *PL_bufptr;
+}
+#define peek_char() THX_peek_char(aTHX)
+
+static char THX_read_char(pTHX)
+{
+       char c = peek_char();
+       PL_bufptr++;
+       if(c == '\n') CopLINE_inc(PL_curcop);
+       return c;
+}
+#define read_char() THX_read_char(aTHX)
+
+static void THX_skip_opt_ws(pTHX)
+{
+       while(1) {
+               switch(peek_char()) {
+                       case '\t': case '\n': case '\v': case '\f': case ' ':
+                               read_char();
+                               break;
+                       default:
+                               return;
+               }
+       }
+}
+#define skip_opt_ws() THX_skip_opt_ws(aTHX)
+
+/* RPN parser */
+
+static OP *THX_parse_var(pTHX)
+{
+       SV *varname = sv_2mortal(newSVpvs("$"));
+       PADOFFSET varpos;
+       OP *padop;
+       if(peek_char() != '$') Perl_croak(aTHX_ "RPN syntax error");
+       read_char();
+       while(1) {
+               char c = peek_char();
+               if(!isALNUM(c)) break;
+               read_char();
+               sv_catpvn_nomg(varname, &c, 1);
+       }
+       if(SvCUR(varname) < 2) Perl_croak(aTHX_ "RPN syntax error");
+       varpos = pad_findmy(SvPVX(varname));
+       if(varpos == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(varpos))
+               Perl_croak(aTHX_ "RPN only supports \"my\" variables");
+       padop = newOP(OP_PADSV, 0);
+       padop->op_targ = varpos;
+       return padop;
+}
+#define parse_var() THX_parse_var(aTHX)
+
+#define push_rpn_item(o) \
+       (tmpop = (o), tmpop->op_sibling = stack, stack = tmpop)
+#define pop_rpn_item() \
+       (!stack ? (Perl_croak(aTHX_ "RPN stack underflow"), (OP*)NULL) : \
+        (tmpop = stack, stack = stack->op_sibling, \
+         tmpop->op_sibling = NULL, tmpop))
+
+static OP *THX_parse_rpn_expr(pTHX)
+{
+       OP *stack = NULL, *tmpop;
+       while(1) {
+               char c;
+               skip_opt_ws();
+               c = peek_char();
+               switch(c) {
+                       case /*(*/')': case /*{*/'}': {
+                               OP *result = pop_rpn_item();
+                               if(stack)
+                                       Perl_croak(aTHX_
+                                               "RPN expression must return "
+                                               "a single value");
+                               return result;
+                       } break;
+                       case '0': case '1': case '2': case '3': case '4':
+                       case '5': case '6': case '7': case '8': case '9': {
+                               UV val = 0;
+                               do {
+                                       read_char();
+                                       val = 10*val + (c - '0');
+                                       c = peek_char();
+                               } while(c >= '0' && c <= '9');
+                               push_rpn_item(newSVOP(OP_CONST, 0,
+                                       newSVuv(val)));
+                       } break;
+                       case '$': {
+                               push_rpn_item(parse_var());
+                       } break;
+                       case '+': {
+                               OP *b = pop_rpn_item();
+                               OP *a = pop_rpn_item();
+                               read_char();
+                               push_rpn_item(newBINOP(OP_I_ADD, 0, a, b));
+                       } break;
+                       case '-': {
+                               OP *b = pop_rpn_item();
+                               OP *a = pop_rpn_item();
+                               read_char();
+                               push_rpn_item(newBINOP(OP_I_SUBTRACT, 0, a, b));
+                       } break;
+                       case '*': {
+                               OP *b = pop_rpn_item();
+                               OP *a = pop_rpn_item();
+                               read_char();
+                               push_rpn_item(newBINOP(OP_I_MULTIPLY, 0, a, b));
+                       } break;
+                       case '/': {
+                               OP *b = pop_rpn_item();
+                               OP *a = pop_rpn_item();
+                               read_char();
+                               push_rpn_item(newBINOP(OP_I_DIVIDE, 0, a, b));
+                       } break;
+                       case '%': {
+                               OP *b = pop_rpn_item();
+                               OP *a = pop_rpn_item();
+                               read_char();
+                               push_rpn_item(newBINOP(OP_I_MODULO, 0, a, b));
+                       } break;
+                       default: {
+                               Perl_croak(aTHX_ "RPN syntax error");
+                       } break;
+               }
+       }
+}
+#define parse_rpn_expr() THX_parse_rpn_expr(aTHX)
+
+static OP *THX_parse_keyword_rpn(pTHX)
+{
+       OP *op;
+       skip_opt_ws();
+       if(peek_char() != '('/*)*/)
+               Perl_croak(aTHX_ "RPN expression must be parenthesised");
+       read_char();
+       op = parse_rpn_expr();
+       if(peek_char() != /*(*/')')
+               Perl_croak(aTHX_ "RPN expression must be parenthesised");
+       read_char();
+       return op;
+}
+#define parse_keyword_rpn() THX_parse_keyword_rpn(aTHX)
+
+static OP *THX_parse_keyword_calcrpn(pTHX)
+{
+       OP *varop, *exprop;
+       skip_opt_ws();
+       varop = parse_var();
+       skip_opt_ws();
+       if(peek_char() != '{'/*}*/)
+               Perl_croak(aTHX_ "RPN expression must be braced");
+       read_char();
+       exprop = parse_rpn_expr();
+       if(peek_char() != /*{*/'}')
+               Perl_croak(aTHX_ "RPN expression must be braced");
+       read_char();
+       return newASSIGNOP(OPf_STACKED, varop, 0, exprop);
+}
+#define parse_keyword_calcrpn() THX_parse_keyword_calcrpn(aTHX)
+
+/* plugin glue */
+
+static int THX_keyword_active(pTHX_ SV *hintkey_sv)
+{
+       HE *he;
+       if(!GvHV(PL_hintgv)) return 0;
+       he = hv_fetch_ent(GvHV(PL_hintgv), hintkey_sv, 0,
+                               SvSHARED_HASH(hintkey_sv));
+       return he && SvTRUE(HeVAL(he));
+}
+#define keyword_active(hintkey_sv) THX_keyword_active(aTHX_ hintkey_sv)
+
+static void THX_keyword_enable(pTHX_ SV *hintkey_sv)
+{
+       SV *val_sv = newSViv(1);
+       HE *he;
+       PL_hints |= HINT_LOCALIZE_HH;
+       gv_HVadd(PL_hintgv);
+       he = hv_store_ent(GvHV(PL_hintgv),
+               hintkey_sv, val_sv, SvSHARED_HASH(hintkey_sv));
+       if(he) {
+               SV *val = HeVAL(he);
+               SvSETMAGIC(val);
+       } else {
+               SvREFCNT_dec(val_sv);
+       }
+}
+#define keyword_enable(hintkey_sv) THX_keyword_enable(aTHX_ hintkey_sv)
+
+static void THX_keyword_disable(pTHX_ SV *hintkey_sv)
+{
+       if(GvHV(PL_hintgv)) {
+               PL_hints |= HINT_LOCALIZE_HH;
+               hv_delete_ent(GvHV(PL_hintgv),
+                       hintkey_sv, G_DISCARD, SvSHARED_HASH(hintkey_sv));
+       }
+}
+#define keyword_disable(hintkey_sv) THX_keyword_disable(aTHX_ hintkey_sv)
+
+static int my_keyword_plugin(pTHX_
+       char *keyword_ptr, STRLEN keyword_len, OP **op_ptr)
+{
+       if(keyword_len == 3 && strnEQ(keyword_ptr, "rpn", 3) &&
+                       keyword_active(hintkey_rpn_sv)) {
+               *op_ptr = parse_keyword_rpn();
+               return KEYWORD_PLUGIN_EXPR;
+       } else if(keyword_len == 7 && strnEQ(keyword_ptr, "calcrpn", 7) &&
+                       keyword_active(hintkey_calcrpn_sv)) {
+               *op_ptr = parse_keyword_calcrpn();
+               return KEYWORD_PLUGIN_STMT;
+       } else {
+               return next_keyword_plugin(aTHX_
+                               keyword_ptr, keyword_len, op_ptr);
+       }
+}
+
+MODULE = XS::APItest::KeywordRPN PACKAGE = XS::APItest::KeywordRPN
+
+BOOT:
+       hintkey_rpn_sv = newSVpvs_share("XS::APItest::KeywordRPN/rpn");
+       hintkey_calcrpn_sv = newSVpvs_share("XS::APItest::KeywordRPN/calcrpn");
+       next_keyword_plugin = PL_keyword_plugin;
+       PL_keyword_plugin = my_keyword_plugin;
+
+void
+import(SV *classname, ...)
+PREINIT:
+       int i;
+PPCODE:
+       for(i = 1; i != items; i++) {
+               SV *item = ST(i);
+               if(sv_is_string(item) && strEQ(SvPVX(item), "rpn")) {
+                       keyword_enable(hintkey_rpn_sv);
+               } else if(sv_is_string(item) && strEQ(SvPVX(item), "calcrpn")) {
+                       keyword_enable(hintkey_calcrpn_sv);
+               } else {
+                       Perl_croak(aTHX_
+                               "\"%s\" is not exported by the %s module",
+                               SvPV_nolen(item), SvPV_nolen(ST(0)));
+               }
+       }
+
+void
+unimport(SV *classname, ...)
+PREINIT:
+       int i;
+PPCODE:
+       for(i = 1; i != items; i++) {
+               SV *item = ST(i);
+               if(sv_is_string(item) && strEQ(SvPVX(item), "rpn")) {
+                       keyword_disable(hintkey_rpn_sv);
+               } else if(sv_is_string(item) && strEQ(SvPVX(item), "calcrpn")) {
+                       keyword_disable(hintkey_calcrpn_sv);
+               } else {
+                       Perl_croak(aTHX_
+                               "\"%s\" is not exported by the %s module",
+                               SvPV_nolen(item), SvPV_nolen(ST(0)));
+               }
+       }
diff --git a/ext/XS-APItest-KeywordRPN/Makefile.PL b/ext/XS-APItest-KeywordRPN/Makefile.PL
new file mode 100644 (file)
index 0000000..ae2c72a
--- /dev/null
@@ -0,0 +1,17 @@
+{ use 5.006; }
+use warnings;
+use strict;
+
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+    NAME => "XS::APItest::KeywordRPN",
+    VERSION_FROM => "KeywordRPN.pm",
+    PREREQ_PM => {},
+    ABSTRACT_FROM => "KeywordRPN.pm",
+    AUTHOR => "Andrew Main (Zefram) <zefram\@fysh.org>",
+);
+
+sub MY::install { "install ::\n" }
+
+1;
diff --git a/ext/XS-APItest-KeywordRPN/README b/ext/XS-APItest-KeywordRPN/README
new file mode 100644 (file)
index 0000000..4caa629
--- /dev/null
@@ -0,0 +1,25 @@
+NAME
+
+XS::APItest::KeywordRPN - write arithmetic expressions in RPN
+
+DESCRIPTION
+
+This module supplies plugged-in keywords, using the new mechanism in Perl
+5.11.2, that allow arithmetic to be expressed in reverse Polish notation,
+in an otherwise Perl program.  This module has serious limitations and
+is not intended for real use: its purpose is only to test the keyword
+plugin mechanism.  For that purpose it is part of the Perl core source
+distribution, and is not meant to be installed.
+
+AUTHOR
+
+Andrew Main (Zefram) <zefram@fysh.org>
+
+COPYRIGHT
+
+Copyright (C) 2009 Andrew Main (Zefram) <zefram@fysh.org>
+
+LICENSE
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
diff --git a/ext/XS-APItest-KeywordRPN/t/keyword_plugin.t b/ext/XS-APItest-KeywordRPN/t/keyword_plugin.t
new file mode 100644 (file)
index 0000000..2b705d7
--- /dev/null
@@ -0,0 +1,76 @@
+use warnings;
+use strict;
+
+use Test::More tests => 13;
+
+BEGIN { $^H |= 0x20000; }
+no warnings;
+
+my($t, $n);
+$n = 5;
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN ();
+       $t = rpn($n $n 1 + * 2 /);
+};
+isnt $@, "";
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(rpn);
+       $t = rpn($n $n 1 + * 2 /);
+};
+is $@, "";
+is $t, 15;
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(rpn);
+       $t = join(":", "x", rpn($n $n 1 + * 2 /), "y");
+};
+is $@, "";
+is $t, "x:15:y";
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(rpn);
+       $t = 1 + rpn($n $n 1 + * 2 /) * 10;
+};
+is $@, "";
+is $t, 151;
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(rpn);
+       $t = rpn($n $n 1 + * 2 /);
+       $t++;
+};
+is $@, "";
+is $t, 16;
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(rpn);
+       $t = rpn($n $n 1 + * 2 /)
+       $t++;
+};
+isnt $@, "";
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(calcrpn);
+       calcrpn $t { $n $n 1 + * 2 / }
+       $t++;
+};
+is $@, "";
+is $t, 16;
+
+$t = undef;
+eval q{
+       use XS::APItest::KeywordRPN qw(calcrpn);
+       123 + calcrpn $t { $n $n 1 + * 2 / } ;
+};
+isnt $@, "";
+
+1;
index c40e4b8..f80f3ea 100644 (file)
@@ -23,10 +23,10 @@ our @EXPORT = qw( print_double print_int print_long
                  my_cxt_getint my_cxt_getsv my_cxt_setint my_cxt_setsv
                  sv_setsv_cow_hashkey_core sv_setsv_cow_hashkey_notcore
                  rmagical_cast rmagical_flags
-                 DPeek utf16_to_utf8 utf16_to_utf8_reversed
+                 DPeek utf16_to_utf8 utf16_to_utf8_reversed pmflag
 );
 
-our $VERSION = '0.16';
+our $VERSION = '0.17';
 
 use vars '$WARNINGS_ON_BOOTSTRAP';
 use vars map "\$${_}_called_PP", qw(BEGIN UNITCHECK CHECK INIT END);
index 18d6752..e8c36d7 100644 (file)
@@ -921,3 +921,13 @@ utf16_to_utf8 (sv, ...)
        SvPOK_on(dest);
        ST(0) = dest;
        XSRETURN(1);
+
+U32
+pmflag (flag, before = 0)
+       int flag
+       U32 before
+   CODE:
+       pmflag(&before, flag);
+       RETVAL = before;
+    OUTPUT:
+       RETVAL
diff --git a/ext/XS-APItest/t/pmflag.t b/ext/XS-APItest/t/pmflag.t
new file mode 100644 (file)
index 0000000..269b6bc
--- /dev/null
@@ -0,0 +1,41 @@
+#!perl
+use strict;
+use Test::More 'no_plan';
+
+my @warnings;
+$SIG{__WARN__} = sub {
+    push @warnings, "@_";
+};
+
+use XS::APItest 'pmflag';
+
+foreach (["\0", 0],
+        ['Q', 0],
+        ['c', 0x00004000],
+       ) {
+    my ($char, $val) = @$_;
+    my $ord = ord $char;
+    foreach my $before (0, 1) {
+       my $got = pmflag($ord, $before);
+       is($got, $before | $val, "Flag $ord, before $before");
+       is(@warnings, 1);
+       like($warnings[0],
+            qr/^Perl_pmflag\(\) is deprecated, and will be removed from the XS API/);
+       @warnings = ();
+
+       no warnings 'deprecated';
+
+       $got = pmflag($ord, $before);
+       is($got, $before | $val, "Flag $ord, before $before");
+       is(@warnings, 0);
+       @warnings = ();
+
+       use warnings;
+       $got = pmflag($ord, $before);
+       is($got, $before | $val, "Flag $ord, before $before");
+       is(@warnings, 1);
+       like($warnings[0],
+            qr/^Perl_pmflag\(\) is deprecated, and will be removed from the XS API/);
+       @warnings = ();
+    }
+}
index b554d88..4928017 100644 (file)
@@ -363,6 +363,7 @@ Perl_vstringify
 Perl_vcmp
 Perl_ninstr
 Perl_op_free
+Perl_pad_findmy
 Perl_find_rundefsvoffset
 Perl_pad_sv
 Perl_reentrant_size
index cf55776..f1c81b8 100644 (file)
@@ -9,6 +9,7 @@ check
 fold
 fold_locale
 freq
+keyword_plugin
 memory_wrap
 no_aelem
 no_dir_func
diff --git a/gv.c b/gv.c
index 22af274..3e225bc 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1963,6 +1963,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
         case int_amg:
         case iter_amg:                 /* XXXX Eventually should do to_gv. */
         case ftest_amg:                /* XXXX Eventually should do to_gv. */
+        case regexp_amg:
             /* FAIL safe */
             return NULL;       /* Delegate operation to standard mechanisms. */
             break;
index 69d5c1f..be27c6a 100644 (file)
@@ -1,6 +1,6 @@
 package Carp;
 
-our $VERSION = '1.13';
+our $VERSION = '1.14';
 
 our $MaxEvalLen = 0;
 our $Verbose    = 0;
@@ -43,7 +43,7 @@ sub longmess {
     # number of call levels to go back, so calls to longmess were off
     # by one.  Other code began calling longmess and expecting this
     # behaviour, so the replacement has to emulate that behaviour.
-    my $call_pack = caller();
+    my $call_pack = defined (*CORE::GLOBAL::caller{CODE}) ? *CORE::GLOBAL::caller{CODE}->() : caller();
     if ($Internal{$call_pack} or $CarpInternal{$call_pack}) {
       return longmess_heavy(@_);
     }
@@ -55,7 +55,7 @@ sub longmess {
 
 sub shortmess {
     # Icky backwards compatibility wrapper. :-(
-    local @CARP_NOT = caller();
+    local @CARP_NOT = defined (*CORE::GLOBAL::caller{CODE}) ? *CORE::GLOBAL::caller{CODE}->() : caller();
     shortmess_heavy(@_);
 };
 
@@ -70,7 +70,7 @@ sub caller_info {
   my %call_info;
   @call_info{
     qw(pack file line sub has_args wantarray evaltext is_require)
-  } = caller($i);
+  } = defined (*CORE::GLOBAL::caller::{CODE}) ? *CORE::GLOBAL::{caller}->($i) : caller($i);
   
   unless (defined $call_info{pack}) {
     return ();
@@ -149,7 +149,8 @@ sub long_error_loc {
   my $i;
   my $lvl = $CarpLevel;
   {
-    my $pkg = caller(++$i);
+    ++$i;
+    my $pkg = defined (*CORE::GLOBAL::caller{CODE}) ? *CORE::GLOBAL::caller{CODE}->($i) : caller($i);
     unless(defined($pkg)) {
       # This *shouldn't* happen.
       if (%Internal) {
@@ -224,8 +225,10 @@ sub short_error_loc {
   my $i = 1;
   my $lvl = $CarpLevel;
   {
-    my $called = caller($i++);
-    my $caller = caller($i);
+
+    my $called = defined (*CORE::GLOBAL::caller{CODE}) ? *CORE::GLOBAL::caller{CODE}->($i) : caller($i);
+    $i++;
+    my $caller = defined (*CORE::GLOBAL::caller{CODE}) ? *CORE::GLOBAL::caller{CODE}->($i) : caller($i);
 
     return 0 unless defined($caller); # What happened?
     redo if $Internal{$caller};
index af07ed6..63b43b2 100644 (file)
@@ -8,7 +8,7 @@ my $Is_VMS = $^O eq 'VMS';
 
 use Carp qw(carp cluck croak confess);
 
-plan tests => 37;
+plan tests => 39;
 
 ok 1;
 
@@ -266,6 +266,18 @@ cluck "Bang!"
 
 cluck_undef (0, "undef", 2, undef, 4);
 
+# check that Carp respects CORE::GLOBAL::caller override after Carp
+# has been compiled
+{
+    my $accum = '';
+    local *CORE::GLOBAL::caller = sub { local *__ANON__="fakecaller"; my @c=CORE::caller(@_); $c[0] ||= 'undef'; $accum .= "@c[0..3]\n"; return CORE::caller(($_[0]||0)+1) };
+    eval "scalar caller()";
+    like( $accum, qr/main::fakecaller/, "test CORE::GLOBAL::caller override in eval");
+    $accum = '';
+    A::long();
+    like( $accum, qr/main::fakecaller/, "test CORE::GLOBAL::caller override in Carp");
+}
+
 # line 1 "A"
 package A;
 sub short {
diff --git a/lib/legacy.pm b/lib/legacy.pm
new file mode 100755 (executable)
index 0000000..a1f21a6
--- /dev/null
@@ -0,0 +1,140 @@
+package legacy;
+
+our $VERSION = '1.00';
+
+$unicode8bit::hint_bits = 0x00000800;
+
+my %legacy_bundle = (
+    "5.10" => [qw(unicode8bit)],
+    "5.11" => [qw(unicode8bit)],
+);
+
+my %legacy = ( 'unicode8bit' => '0' );
+
+=head1 NAME
+
+legacy - Perl pragma to preserve legacy behaviors or enable new non-default
+behaviors
+
+=head1 SYNOPSIS
+
+ use legacy ':5.10'; # Keeps semantics the same as in perl 5.10
+
+ no legacy;
+
+=cut
+
+    #no legacy qw(unicode8bit);
+
+=pod
+
+=head1 DESCRIPTION
+
+Some programs may rely on behaviors that for others are problematic or
+even wrong.  A new version of Perl may change behaviors from past ones,
+and when it is viewed that the old way of doing things may be required
+to still be supported, that behavior will be added to the list recognized
+by this pragma to allow that.
+
+Additionally, a new behavior may be supported in a new version of Perl, but
+for whatever reason the default remains the old one.  This pragma can enable
+the new behavior.
+
+Like other pragmas (C<use feature>, for example), C<use legacy qw(foo)> will
+only make the legacy behavior for "foo" available from that point to the end of
+the enclosing block.
+
+B<This pragma is, for the moment, a skeleton and does not actually affect any
+behaviors yet>
+
+=head2 B<use legacy>
+
+Preserve the old way of doing things when a new version of Perl is
+released that changes things
+
+=head2 B<no legacy>
+
+Turn on a new behavior in a version of Perl that understands
+it but has it turned off by default.  For example, C<no legacy 'foo'> turns on
+behavior C<foo> in the lexical scope of the pragma.  Simply C<no legacy>
+turns on all new behaviors known to the pragma.
+
+=head1 LEGACY BUNDLES
+
+It's possible to turn off all new behaviors past a given release by 
+using a I<legacy bundle>, which is the name of the release prefixed with
+a colon, to distinguish it from an individual legacy behavior.
+
+Specifying sub-versions such as the C<0> in C<5.10.0> in legacy bundles has
+no effect: legacy bundles are guaranteed to be the same for all sub-versions.
+
+Legacy bundles are not allowed with C<no legacy>
+
+=cut
+
+sub import {
+    my $class = shift;
+    if (@_ == 0) {
+        croak("No legacy behaviors specified");
+    }
+    while (@_) {
+        my $name = shift(@_);
+        if (substr($name, 0, 1) eq ":") {
+            my $v = substr($name, 1);
+            if (!exists $legacy_bundle{$v}) {
+                $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
+                if (!exists $legacy_bundle{$v}) {
+                    unknown_legacy_bundle(substr($name, 1));
+                }
+            }
+            unshift @_, @{$legacy_bundle{$v}};
+            next;
+        }
+        if (!exists $legacy{$name}) {
+            unknown_legacy($name);
+        }
+        $^H &= ~$unicode8bit::hint_bits;    # The only thing it could be as of yet
+    }
+}
+
+
+sub unimport {
+    my $class = shift;
+
+    # A bare C<no legacy> should disable *all* legacy behaviors
+    if (!@_) {
+        unshift @_, keys(%legacy);
+    }
+
+    while (@_) {
+        my $name = shift;
+        if (substr($name, 0, 1) eq ":") {
+            croak(sprintf('Legacy bundles (%s) are not allowed in "no legacy"',
+                $name));
+        }
+        if (!exists($legacy{$name})) {
+            unknown_legacy($name);
+        }
+        else {
+            $^H |= $unicode8bit::hint_bits; # The only thing it could be as of yet
+        }
+    }
+}
+
+sub unknown_legacy {
+    my $legacy = shift;
+    croak(sprintf('Legacy "%s" is not supported by Perl %vd', $legacy, $^V));
+}
+
+sub unknown_legacy_bundle {
+    my $legacy = shift;
+    croak(sprintf('Legacy bundle "%s" is not supported by Perl %vd',
+        $legacy, $^V));
+}
+
+sub croak {
+    require Carp;
+    Carp::croak(@_);
+}
+
+1;
index 8960171..7d09d69 100644 (file)
@@ -1,6 +1,6 @@
 package overload;
 
-our $VERSION = '1.09';
+our $VERSION = '1.10';
 
 sub nil {}
 
@@ -135,7 +135,7 @@ sub mycan {                         # Real can would leave stubs.
         unary            => "neg ! ~",
         mutators         => '++ --',
         func             => "atan2 cos sin exp abs log sqrt int",
-        conversion       => 'bool "" 0+',
+        conversion       => 'bool "" 0+ qr',
         iterators        => '<>',
          filetest         => "-X",
         dereferencing    => '${} @{} %{} &{} *{}',
@@ -400,15 +400,20 @@ floating-point-like types one should follow the same semantic.  If
 C<int> is unavailable, it can be autogenerated using the overloading of
 C<0+>.
 
-=item * I<Boolean, string and numeric conversion>
+=item * I<Boolean, string, numeric and regexp conversions>
 
-    'bool', '""', '0+',
+    'bool', '""', '0+', 'qr'
 
-If one or two of these operations are not overloaded, the remaining ones can
-be used instead.  C<bool> is used in the flow control operators
-(like C<while>) and for the ternary C<?:> operation.  These functions can
-return any arbitrary Perl value.  If the corresponding operation for this value
-is overloaded too, that operation will be called again with this value.
+If one or two of these operations are not overloaded, the remaining ones
+can be used instead.  C<bool> is used in the flow control operators
+(like C<while>) and for the ternary C<?:> operation; C<qr> is used for
+the RHS of C<=~> and when an object is interpolated into a regexp.
+
+C<bool>, C<"">, and C<0+> can return any arbitrary Perl value.  If the
+corresponding operation for this value is overloaded too, that operation
+will be called again with this value. C<qr> must return a compiled
+regexp, or a ref to a compiled regexp (such as C<qr//> returns), and any
+further overloading on the return value will be ignored.
 
 As a special case if the overload returns the object itself then it will
 be used directly. An overloaded conversion returning the object is
@@ -518,7 +523,7 @@ A computer-readable form of the above table is available in the hash
  unary           => 'neg ! ~',
  mutators        => '++ --',
  func            => 'atan2 cos sin exp abs log sqrt',
- conversion      => 'bool "" 0+',
+ conversion      => 'bool "" 0+ qr',
  iterators       => '<>',
  filetest         => '-X',
  dereferencing   => '${} @{} %{} &{} *{}',
@@ -693,8 +698,8 @@ is not defined.
 
 =item I<Conversion operations>
 
-String, numeric, and boolean conversion are calculated in terms of one
-another if not all of them are defined.
+String, numeric, boolean and regexp conversions are calculated in terms
+of one another if not all of them are defined.
 
 =item I<Increment and decrement>
 
index 1f9bc1b..d54068e 100644 (file)
@@ -47,7 +47,7 @@ sub numify { 0 + "${$_[0]}" } # Not needed, additional overhead
 package main;
 
 $| = 1;
-use Test::More tests => 577;
+use Test::More tests => 605;
 
 
 $a = new Oscalar "087";
@@ -1182,6 +1182,91 @@ foreach my $op (qw(<=> == != < <= > >=)) {
 }
 
 {
+    {
+        package QRonly;
+        use overload qr => sub { qr/x/ }, fallback => 1;
+    }
+    {
+        my $x = bless [], "QRonly";
+
+        # like tries to be too clever, and decides that $x-stringified
+        # doesn't look like a regex
+        ok("x" =~ $x, "qr-only matches");
+        ok("y" !~ $x, "qr-only doesn't match what it shouldn't");
+        ok("xx" =~ /x$x/, "qr-only matches with concat");
+        like("$x", qr/^QRonly=ARRAY/, "qr-only doesn't have string overload");
+
+        my $qr = bless qr/y/, "QRonly";
+        ok("x" =~ $qr, "qr with qr-overload uses overload");
+        ok("y" !~ $qr, "qr with qr-overload uses overload");
+        is("$qr", "".qr/y/, "qr with qr-overload stringify");
+
+        my $rx = $$qr;
+        ok("y" =~ $rx, "bare rx with qr-overload doesn't overload match");
+        ok("x" !~ $rx, "bare rx with qr-overload doesn't overload match");
+        is("$rx", "".qr/y/, "bare rx with qr-overload stringify");
+    }
+    {
+        package QRandSTR;
+        use overload qr => sub { qr/x/ }, q/""/ => sub { "y" };
+    }
+    {
+        my $x = bless [], "QRandSTR";
+        ok("x" =~ $x, "qr+str uses qr for match");
+        ok("y" !~ $x, "qr+str uses qr for match");
+        ok("xx" =~ /x$x/, "qr+str uses qr for match with concat");
+        is("$x", "y", "qr+str uses str for stringify");
+
+        my $qr = bless qr/z/, "QRandSTR";
+        is("$qr", "y", "qr with qr+str uses str for stringify");
+        ok("xx" =~ /x$x/, "qr with qr+str uses qr for match");
+
+        my $rx = $$qr;
+        ok("z" =~ $rx, "bare rx with qr+str doesn't overload match");
+        is("$rx", "".qr/z/, "bare rx with qr+str doesn't overload stringify");
+    }
+    {
+        package QRany;
+        use overload qr => sub { $_[0]->(@_) };
+
+        package QRself;
+        use overload qr => sub { $_[0] };
+    }
+    {
+        my $rx = bless sub { ${ qr/x/ } }, "QRany";
+        ok("x" =~ $rx, "qr overload accepts a bare rx");
+        ok("y" !~ $rx, "qr overload accepts a bare rx");
+
+        my $str = bless sub { "x" }, "QRany";
+        ok(!eval { "x" =~ $str }, "qr overload doesn't accept a string");
+        like($@, qr/^Overloaded qr did not return a REGEXP/, "correct error");
+
+        my $oqr = bless qr/z/, "QRandSTR";
+        my $oqro = bless sub { $oqr }, "QRany";
+        ok("z" =~ $oqro, "qr overload doesn't recurse");
+
+        my $qrs = bless qr/z/, "QRself";
+        ok("z" =~ $qrs, "qr overload can return self");
+    }
+    {
+        package STRonly;
+        use overload q/""/ => sub { "x" };
+
+        package STRonlyFB;
+        use overload q/""/ => sub { "x" }, fallback => 1;
+    }
+    {
+        my $fb = bless [], "STRonlyFB";
+        ok("x" =~ $fb, "qr falls back to \"\"");
+        ok("y" !~ $fb, "qr falls back to \"\"");
+
+        my $nofb = bless [], "STRonly";
+        ok("x" =~ $nofb, "qr falls back even without fallback");
+        ok("y" !~ $nofb, "qr falls back even without fallback");
+    }
+}
+
+{
     my $twenty_three = 23;
     # Check that constant overloading propagates into evals
     BEGIN { overload::constant integer => sub { 23 } }
index 7c39b1c..d9daab5 100644 (file)
@@ -81,6 +81,7 @@ our @names = qw#
     (.=
     (~~
     (-X
+    (qr
     DESTROY
 #;
 
@@ -152,6 +153,7 @@ our @enums = qw#
     concat_ass
     smart
     ftest
+    regexp
     DESTROY
 #;
 
index 108b762..626bbb3 100644 (file)
--- a/mathoms.c
+++ b/mathoms.c
@@ -684,11 +684,13 @@ Perl_init_i18nl14n(pTHX_ int printwarn)
 PP(pp_padany)
 {
     DIE(aTHX_ "NOT IMPL LINE %d",__LINE__);
+    return NORMAL;
 }
 
 PP(pp_mapstart)
 {
     DIE(aTHX_ "panic: mapstart");      /* uses grepstart */
+    return NORMAL;
 }
 
 /* These ops all have the same body as pp_null.  */
diff --git a/op.c b/op.c
index d7a5234..504fae9 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1,3 +1,4 @@
+#line 2 "op.c"
 /*    op.c
  *
  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
index 909a0ee..4a9c94b 100644 (file)
@@ -83,6 +83,7 @@ static const U8 PL_AMG_namelens[NofAMmeth] = {
     3,
     3,
     3,
+    3,
     7
 };
 
@@ -159,5 +160,6 @@ static const char * const PL_AMG_names[NofAMmeth] = {
     "(.=",
     "(~~",
     "(-X",
+    "(qr",
     "DESTROY"
 };
index 1a1e69c..bbef5cb 100644 (file)
@@ -80,6 +80,7 @@ enum {
     concat_ass_amg,
     smart_amg,
     ftest_amg,
+    regexp_amg,
     DESTROY_amg,
     max_amg_code
     /* Do not leave a trailing comma here.  C9X allows it, C89 doesn't. */
index aae9e6f..d4ba9a7 100644 (file)
@@ -229,5 +229,6 @@ concat              (.
 concat_ass     (.=
 smart          (~~
 ftest           (-X
+regexp          (qr
 # Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry
 DESTROY                DESTROY
diff --git a/perl.c b/perl.c
index 1ca8bc8..e1c9ee1 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -1,3 +1,4 @@
+#line 2 "perl.c"
 /*    perl.c
  *
  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
diff --git a/perl.h b/perl.h
index c4521aa..874d0c3 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3179,6 +3179,14 @@ typedef pthread_key_t    perl_key;
 #  endif
 #endif
 
+#if !defined(PERL_CORE) && !defined(PERL_NO_SHORT_NAMES)
+#  if defined(PERL_IMPLICIT_CONTEXT)
+#    define pmflag(a,b)                Perl_pmflag(aTHX_ a,b)
+#  else
+#    define pmflag                     Perl_pmflag
+#  endif
+#endif
+
 #ifdef HASATTRIBUTE_DEPRECATED
 #  define __attribute__deprecated__         __attribute__((deprecated))
 #endif
@@ -4669,6 +4677,7 @@ enum {            /* pass one of these to get_vtbl */
 #define HINT_BLOCK_SCOPE       0x00000100
 #define HINT_STRICT_SUBS       0x00000200 /* strict pragma */
 #define HINT_STRICT_VARS       0x00000400 /* strict pragma */
+#define HINT_UNI_8_BIT         0x00000800 /* unicode8bit pragma */
 
 /* The HINT_NEW_* constants are used by the overload pragma */
 #define HINT_NEW_INTEGER       0x00001000
@@ -4745,6 +4754,11 @@ typedef void (*XSUBADDR_t) (pTHX_ CV *);
 typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
 typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
 typedef void(CPERLscope(*Perl_ophook_t))(pTHX_ OP*);
+typedef int (CPERLscope(*Perl_keyword_plugin_t))(pTHX_ char*, STRLEN, OP**);
+
+#define KEYWORD_PLUGIN_DECLINE 0
+#define KEYWORD_PLUGIN_STMT    1
+#define KEYWORD_PLUGIN_EXPR    2
 
 /* Interpreter exitlist entry */
 typedef struct exitlistentry {
index d819bc8..ff2a278 100644 (file)
--- a/perlapi.h
+++ b/perlapi.h
@@ -766,6 +766,8 @@ END_EXTERN_C
 #define PL_interp_size         (*Perl_Ginterp_size_ptr(NULL))
 #undef  PL_interp_size_5_10_0
 #define PL_interp_size_5_10_0  (*Perl_Ginterp_size_5_10_0_ptr(NULL))
+#undef  PL_keyword_plugin
+#define PL_keyword_plugin      (*Perl_Gkeyword_plugin_ptr(NULL))
 #undef  PL_malloc_mutex
 #define PL_malloc_mutex                (*Perl_Gmalloc_mutex_ptr(NULL))
 #undef  PL_mmap_page_size
index 49f4d5e..3639bd6 100644 (file)
@@ -8,9 +8,9 @@
  *
  */
 
-/****************/
-/* Truly global */
-/****************/
+/*
+=head1 Global Variables
+*/
 
 /* Don't forget to re-run embed.pl to propagate changes! */
 
@@ -186,3 +186,65 @@ PERLVARI(Gglobal_struct_size,      U16,    sizeof(struct perl_vars))
 PERLVARI(Ginterp_size_5_10_0, U16,
         PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_10_0_INTERP_MEMBER))
 #endif
+
+/*
+=for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
+
+Function pointer, pointing at a function used to handle extended keywords.
+The function should be declared as
+
+       int keyword_plugin_function(pTHX_
+               char *keyword_ptr, STRLEN keyword_len,
+               OP **op_ptr)
+
+The function is called from the tokeniser, whenever a possible keyword
+is seen.  C<keyword_ptr> points at the word in the parser's input
+buffer, and C<keyword_len> gives its length; it is not null-terminated.
+The function is expected to examine the word, and possibly other state
+such as L<%^H|perlvar/%^H>, to decide whether it wants to handle it
+as an extended keyword.  If it does not, the function should return
+C<KEYWORD_PLUGIN_DECLINE>, and the normal parser process will continue.
+
+If the function wants to handle the keyword, it first must
+parse anything following the keyword that is part of the syntax
+introduced by the keyword.  The lexer interface is poorly documented.
+Broadly speaking, parsing needs to look at the buffer that extends
+from C<PL_parser-E<gt>bufptr> to C<PL_parser-E<gt>bufend>, and
+C<PL_parser-E<gt>bufptr> must be advanced across whatever text is
+consumed by the parsing process.  The buffer end is not necessarily the
+real end of the input text, but refilling the buffer is too complicated
+to discuss here.  See L<Devel::Declare> for some parsing experience,
+and hope for more core support in a future version of Perl.
+
+When a keyword is being handled, the plugin function must build
+a tree of C<OP> structures, representing the code that was parsed.
+The root of the tree must be stored in C<*op_ptr>.  The function then
+returns a contant indicating the syntactic role of the construct that
+it has parsed: C<KEYWORD_PLUGIN_STMT> if it is a complete statement, or
+C<KEYWORD_PLUGIN_EXPR> if it is an expression.  Note that a statement
+construct cannot be used inside an expression (except via C<do BLOCK>
+and similar), and an expression is not a complete statement (it requires
+at least a terminating semicolon).
+
+When a keyword is handled, the plugin function may also have
+(compile-time) side effects.  It may modify C<%^H>, define functions, and
+so on.  Typically, if side effects are the main purpose of a handler,
+it does not wish to generate any ops to be included in the normal
+compilation.  In this case it is still required to supply an op tree,
+but it suffices to generate a single null op.
+
+That's how the C<*PL_keyword_plugin> function needs to behave overall.
+Conventionally, however, one does not completely replace the existing
+handler function.  Instead, take a copy of C<PL_keyword_plugin> before
+assigning your own function pointer to it.  Your handler function should
+look for keywords that it is interested in and handle those.  Where it
+is not interested, it should call the saved plugin function, passing on
+the arguments it received.  Thus C<PL_keyword_plugin> actually points
+at a chain of handler functions, all of which have an opportunity to
+handle keywords, and only the last function in the chain (built into
+the Perl core) will normally return C<KEYWORD_PLUGIN_DECLINE>.
+
+=cut
+*/
+
+PERLVARI(Gkeyword_plugin, Perl_keyword_plugin_t, MEMBER_TO_FPTR(Perl_keyword_plugin_standard))
index a74e3d3..d37a45d 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -1,10 +1,10 @@
 case 2:
-#line 142 "perly.y"
+#line 143 "perly.y"
     { (yyval.ival) = (ps[(1) - (2)].val.ival); newPROG(block_end((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval))); ;}
     break;
 
   case 3:
-#line 147 "perly.y"
+#line 148 "perly.y"
     { if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
                              PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
                          (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
@@ -14,24 +14,24 @@ case 2:
     break;
 
   case 4:
-#line 156 "perly.y"
+#line 157 "perly.y"
     { (yyval.ival) = block_start(TRUE); ;}
     break;
 
   case 5:
-#line 160 "perly.y"
+#line 161 "perly.y"
     { (yyval.ival) = (I32) allocmy("$_"); ;}
     break;
 
   case 6:
-#line 164 "perly.y"
+#line 165 "perly.y"
     {
                    PL_parser->expect = XSTATE; (yyval.ival) = block_start(TRUE);
                ;}
     break;
 
   case 7:
-#line 171 "perly.y"
+#line 172 "perly.y"
     { if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
                              PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
                          (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
@@ -41,17 +41,17 @@ case 2:
     break;
 
   case 8:
-#line 180 "perly.y"
+#line 181 "perly.y"
     { (yyval.ival) = block_start(FALSE); ;}
     break;
 
   case 9:
-#line 185 "perly.y"
+#line 186 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 10:
-#line 187 "perly.y"
+#line 188 "perly.y"
     {
                        (yyval.opval) = IF_MAD(
                                append_list(OP_LINESEQ,
@@ -61,7 +61,7 @@ case 2:
     break;
 
   case 11:
-#line 194 "perly.y"
+#line 195 "perly.y"
     {   (yyval.opval) = append_list(OP_LINESEQ,
                                (LISTOP*)(ps[(1) - (2)].val.opval), (LISTOP*)(ps[(2) - (2)].val.opval));
                            PL_pad_reset_pending = TRUE;
@@ -71,23 +71,23 @@ case 2:
     break;
 
   case 12:
-#line 204 "perly.y"
+#line 205 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;}
     break;
 
   case 14:
-#line 208 "perly.y"
+#line 209 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 15:
-#line 210 "perly.y"
+#line 211 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval)); ;}
     break;
 
   case 16:
-#line 212 "perly.y"
+#line 213 "perly.y"
     {
                          if (PVAL((ps[(1) - (2)].val.p_tkval))) {
                              (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), newOP(OP_NULL, 0));
@@ -107,7 +107,7 @@ case 2:
     break;
 
   case 17:
-#line 229 "perly.y"
+#line 230 "perly.y"
     {
                          (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (3)].val.p_tkval)), (ps[(2) - (3)].val.opval));
                          PL_parser->expect = XSTATE;
@@ -126,70 +126,75 @@ case 2:
     break;
 
   case 18:
-#line 248 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 246 "perly.y"
+    { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval)); ;}
     break;
 
   case 19:
-#line 250 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 251 "perly.y"
+    { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 20:
-#line 252 "perly.y"
+#line 253 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    break;
+
+  case 21:
+#line 255 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
                        ;}
     break;
 
-  case 21:
-#line 256 "perly.y"
+  case 22:
+#line 259 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
                        ;}
     break;
 
-  case 22:
-#line 260 "perly.y"
+  case 23:
+#line 263 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                        ;}
     break;
 
-  case 23:
-#line 264 "perly.y"
+  case 24:
+#line 267 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                        ;}
     break;
 
-  case 24:
-#line 268 "perly.y"
+  case 25:
+#line 271 "perly.y"
     { (yyval.opval) = newFOROP(0, NULL, (line_t)IVAL((ps[(2) - (3)].val.i_tkval)),
                                        (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),((LISTOP*)(yyval.opval))->op_first->op_sibling,'w');
                        ;}
     break;
 
-  case 25:
-#line 273 "perly.y"
+  case 26:
+#line 276 "perly.y"
     { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), scope((ps[(1) - (3)].val.opval))); ;}
     break;
 
-  case 26:
-#line 278 "perly.y"
+  case 27:
+#line 281 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 27:
-#line 280 "perly.y"
+  case 28:
+#line 283 "perly.y"
     { ((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 28:
-#line 284 "perly.y"
+  case 29:
+#line 287 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
                            (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)), scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval));
                            PL_hints |= HINT_BLOCK_SCOPE;
@@ -199,8 +204,8 @@ case 2:
                        ;}
     break;
 
-  case 29:
-#line 295 "perly.y"
+  case 30:
+#line 298 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                                   newCONDOP(0, (ps[(4) - (7)].val.opval), scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -210,8 +215,8 @@ case 2:
                        ;}
     break;
 
-  case 30:
-#line 303 "perly.y"
+  case 31:
+#line 306 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                                   newCONDOP(0, (ps[(4) - (7)].val.opval), scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -221,31 +226,31 @@ case 2:
                        ;}
     break;
 
-  case 31:
-#line 314 "perly.y"
+  case 32:
+#line 317 "perly.y"
     { (yyval.opval) = block_end((ps[(3) - (6)].val.ival),
                newWHENOP((ps[(4) - (6)].val.opval), scope((ps[(6) - (6)].val.opval)))); ;}
     break;
 
-  case 32:
-#line 317 "perly.y"
+  case 33:
+#line 320 "perly.y"
     { (yyval.opval) = newWHENOP(0, scope((ps[(2) - (2)].val.opval))); ;}
     break;
 
-  case 33:
-#line 322 "perly.y"
+  case 34:
+#line 325 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 34:
-#line 324 "perly.y"
+  case 35:
+#line 327 "perly.y"
     { (yyval.opval) = scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 35:
-#line 331 "perly.y"
+  case 36:
+#line 334 "perly.y"
     { OP *innerop;
                          PL_parser->copline = (line_t)(ps[(2) - (9)].val.i_tkval);
                            (yyval.opval) = block_end((ps[(4) - (9)].val.ival),
@@ -259,8 +264,8 @@ case 2:
                        ;}
     break;
 
-  case 36:
-#line 344 "perly.y"
+  case 37:
+#line 347 "perly.y"
     { OP *innerop;
                          PL_parser->copline = (line_t)(ps[(2) - (9)].val.i_tkval);
                            (yyval.opval) = block_end((ps[(4) - (9)].val.ival),
@@ -274,8 +279,8 @@ case 2:
                        ;}
     break;
 
-  case 37:
-#line 356 "perly.y"
+  case 38:
+#line 359 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(4) - (10)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (10)].val.p_tkval)), (line_t)IVAL((ps[(2) - (10)].val.i_tkval)),
@@ -288,8 +293,8 @@ case 2:
                        ;}
     break;
 
-  case 38:
-#line 367 "perly.y"
+  case 39:
+#line 370 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(5) - (9)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (9)].val.p_tkval)), (line_t)IVAL((ps[(2) - (9)].val.i_tkval)),
@@ -301,8 +306,8 @@ case 2:
                        ;}
     break;
 
-  case 39:
-#line 377 "perly.y"
+  case 40:
+#line 380 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(4) - (8)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (8)].val.p_tkval)), (line_t)IVAL((ps[(2) - (8)].val.i_tkval)),
@@ -314,8 +319,8 @@ case 2:
                        ;}
     break;
 
-  case 40:
-#line 389 "perly.y"
+  case 41:
+#line 392 "perly.y"
     { OP *forop;
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (12)].val.i_tkval));
                          forop = newSTATEOP(0, PVAL((ps[(1) - (12)].val.p_tkval)),
@@ -347,16 +352,16 @@ case 2:
                          (yyval.opval) = block_end((ps[(4) - (12)].val.ival), forop); ;}
     break;
 
-  case 41:
-#line 419 "perly.y"
+  case 42:
+#line 422 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (3)].val.p_tkval)),
                                 newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                            NOLINE, (OP*)NULL, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval), 0));
                          TOKEN_GETMAD((ps[(1) - (3)].val.p_tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;}
     break;
 
-  case 42:
-#line 427 "perly.y"
+  case 43:
+#line 430 "perly.y"
     { PL_parser->copline = (line_t) (ps[(2) - (8)].val.i_tkval);
                            (yyval.opval) = block_end((ps[(4) - (8)].val.ival),
                                newSTATEOP(0, PVAL((ps[(1) - (8)].val.p_tkval)),
@@ -364,47 +369,47 @@ case 2:
                                        (PADOFFSET) (ps[(5) - (8)].val.ival)) )); ;}
     break;
 
-  case 43:
-#line 436 "perly.y"
+  case 44:
+#line 439 "perly.y"
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
                          intro_my(); ;}
     break;
 
-  case 44:
-#line 442 "perly.y"
+  case 45:
+#line 445 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 46:
-#line 448 "perly.y"
+  case 47:
+#line 451 "perly.y"
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
                          (yyval.opval) = tmplval.opval; ;}
     break;
 
-  case 48:
-#line 456 "perly.y"
-    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
-    break;
-
   case 49:
-#line 461 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+#line 459 "perly.y"
+    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
   case 50:
-#line 465 "perly.y"
+#line 464 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 51:
-#line 469 "perly.y"
+#line 468 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 52:
-#line 474 "perly.y"
+#line 472 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+    break;
+
+  case 53:
+#line 477 "perly.y"
     {
 #ifdef MAD
                          YYSTYPE tmplval;
@@ -416,45 +421,45 @@ case 2:
                        ;}
     break;
 
-  case 54:
-#line 488 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
-    break;
-
   case 55:
-#line 490 "perly.y"
+#line 491 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 56:
-#line 492 "perly.y"
+#line 493 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 57:
-#line 494 "perly.y"
+#line 495 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 58:
-#line 496 "perly.y"
+#line 497 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 59:
-#line 501 "perly.y"
+#line 499 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 60:
-#line 505 "perly.y"
+#line 504 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    break;
+
+  case 61:
+#line 508 "perly.y"
     { (yyval.opval) = newOP(OP_NULL,0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'p');
                        ;}
     break;
 
-  case 61:
-#line 511 "perly.y"
+  case 62:
+#line 514 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          (yyval.opval) = newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval));
@@ -468,18 +473,18 @@ case 2:
                        ;}
     break;
 
-  case 62:
-#line 524 "perly.y"
+  case 63:
+#line 527 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 63:
-#line 525 "perly.y"
+  case 64:
+#line 528 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 64:
-#line 530 "perly.y"
+  case 65:
+#line 533 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          (yyval.opval) = newMYSUB((ps[(2) - (6)].val.ival), (ps[(3) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), (ps[(6) - (6)].val.opval));
@@ -491,8 +496,8 @@ case 2:
                        ;}
     break;
 
-  case 65:
-#line 543 "perly.y"
+  case 66:
+#line 546 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          {
@@ -514,26 +519,26 @@ case 2:
                        ;}
     break;
 
-  case 66:
-#line 565 "perly.y"
+  case 67:
+#line 568 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 67:
-#line 571 "perly.y"
+  case 68:
+#line 574 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 68:
-#line 576 "perly.y"
+  case 69:
+#line 579 "perly.y"
     { (yyval.ival) = start_subparse(TRUE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
-  case 69:
-#line 581 "perly.y"
+  case 70:
+#line 584 "perly.y"
     { const char *const name = SvPV_nolen_const(((SVOP*)(ps[(1) - (1)].val.opval))->op_sv);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT") || strEQ(name, "CHECK")
@@ -542,25 +547,25 @@ case 2:
                          (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 70:
-#line 591 "perly.y"
+  case 71:
+#line 594 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 72:
-#line 597 "perly.y"
+  case 73:
+#line 600 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 73:
-#line 599 "perly.y"
+  case 74:
+#line 602 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 74:
-#line 603 "perly.y"
+  case 75:
+#line 606 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -569,15 +574,15 @@ case 2:
                        ;}
     break;
 
-  case 75:
-#line 613 "perly.y"
+  case 76:
+#line 616 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 76:
-#line 617 "perly.y"
+  case 77:
+#line 620 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -586,13 +591,13 @@ case 2:
                        ;}
     break;
 
-  case 77:
-#line 626 "perly.y"
+  case 78:
+#line 629 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 78:
-#line 627 "perly.y"
+  case 79:
+#line 630 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL,0),
                                    (OP*)NULL
@@ -602,8 +607,8 @@ case 2:
                        ;}
     break;
 
-  case 79:
-#line 637 "perly.y"
+  case 80:
+#line 640 "perly.y"
     {
 #ifdef MAD
                          (yyval.opval) = package((ps[(3) - (4)].val.opval));
@@ -620,13 +625,13 @@ case 2:
                        ;}
     break;
 
-  case 80:
-#line 654 "perly.y"
+  case 81:
+#line 657 "perly.y"
     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
     break;
 
-  case 81:
-#line 656 "perly.y"
+  case 82:
+#line 659 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          (yyval.opval) = utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
@@ -642,29 +647,29 @@ case 2:
                        ;}
     break;
 
-  case 82:
-#line 673 "perly.y"
+  case 83:
+#line 676 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 83:
-#line 677 "perly.y"
+  case 84:
+#line 680 "perly.y"
     { (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 84:
-#line 681 "perly.y"
+  case 85:
+#line 684 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 86:
-#line 689 "perly.y"
+  case 87:
+#line 692 "perly.y"
     {
 #ifdef MAD
                          OP* op = newNULLLIST();
@@ -676,8 +681,8 @@ case 2:
                        ;}
     break;
 
-  case 87:
-#line 699 "perly.y"
+  case 88:
+#line 702 "perly.y"
     { 
                          OP* term = (ps[(3) - (3)].val.opval);
                          DO_MAD(
@@ -688,16 +693,16 @@ case 2:
                        ;}
     break;
 
-  case 89:
-#line 712 "perly.y"
+  case 90:
+#line 715 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 90:
-#line 717 "perly.y"
+  case 91:
+#line 720 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED,
                                prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (5)].val.i_tkval)),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -706,8 +711,8 @@ case 2:
                        ;}
     break;
 
-  case 91:
-#line 724 "perly.y"
+  case 92:
+#line 727 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
@@ -718,8 +723,8 @@ case 2:
                        ;}
     break;
 
-  case 92:
-#line 733 "perly.y"
+  case 93:
+#line 736 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
                                    newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
@@ -727,8 +732,8 @@ case 2:
                        ;}
     break;
 
-  case 93:
-#line 739 "perly.y"
+  case 94:
+#line 742 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
@@ -736,8 +741,8 @@ case 2:
                        ;}
     break;
 
-  case 94:
-#line 745 "perly.y"
+  case 95:
+#line 748 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
@@ -747,15 +752,15 @@ case 2:
                        ;}
     break;
 
-  case 95:
-#line 753 "perly.y"
+  case 96:
+#line 756 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 96:
-#line 757 "perly.y"
+  case 97:
+#line 760 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -763,22 +768,22 @@ case 2:
                        ;}
     break;
 
-  case 97:
-#line 763 "perly.y"
+  case 98:
+#line 766 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); ;}
     break;
 
-  case 98:
-#line 766 "perly.y"
+  case 99:
+#line 769 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
                        ;}
     break;
 
-  case 101:
-#line 781 "perly.y"
+  case 102:
+#line 784 "perly.y"
     { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval)));
                            PL_parser->expect = XOPERATOR;
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -787,16 +792,16 @@ case 2:
                        ;}
     break;
 
-  case 102:
-#line 788 "perly.y"
+  case 103:
+#line 791 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 103:
-#line 793 "perly.y"
+  case 104:
+#line 796 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
                                        scalar((ps[(4) - (5)].val.opval)));
@@ -806,8 +811,8 @@ case 2:
                        ;}
     break;
 
-  case 104:
-#line 801 "perly.y"
+  case 105:
+#line 804 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
                                        scalar((ps[(3) - (4)].val.opval)));
@@ -816,8 +821,8 @@ case 2:
                        ;}
     break;
 
-  case 105:
-#line 808 "perly.y"
+  case 106:
+#line 811 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval)));
                            PL_parser->expect = XOPERATOR;
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -826,8 +831,8 @@ case 2:
                        ;}
     break;
 
-  case 106:
-#line 815 "perly.y"
+  case 107:
+#line 818 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(4) - (6)].val.opval)));
@@ -839,8 +844,8 @@ case 2:
                        ;}
     break;
 
-  case 107:
-#line 825 "perly.y"
+  case 108:
+#line 828 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(3) - (5)].val.opval)));
@@ -851,8 +856,8 @@ case 2:
                        ;}
     break;
 
-  case 108:
-#line 834 "perly.y"
+  case 109:
+#line 837 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[(1) - (4)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a');
@@ -861,8 +866,8 @@ case 2:
                        ;}
     break;
 
-  case 109:
-#line 841 "perly.y"
+  case 110:
+#line 844 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
                                       newCVREF(0, scalar((ps[(1) - (5)].val.opval)))));
@@ -872,8 +877,8 @@ case 2:
                        ;}
     break;
 
-  case 110:
-#line 850 "perly.y"
+  case 111:
+#line 853 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
                                               newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
@@ -882,8 +887,8 @@ case 2:
                        ;}
     break;
 
-  case 111:
-#line 857 "perly.y"
+  case 112:
+#line 860 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[(1) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -891,8 +896,8 @@ case 2:
                        ;}
     break;
 
-  case 112:
-#line 863 "perly.y"
+  case 113:
+#line 866 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')');
@@ -901,8 +906,8 @@ case 2:
                        ;}
     break;
 
-  case 113:
-#line 870 "perly.y"
+  case 114:
+#line 873 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')');
@@ -911,22 +916,22 @@ case 2:
                        ;}
     break;
 
-  case 114:
-#line 880 "perly.y"
+  case 115:
+#line 883 "perly.y"
     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 115:
-#line 884 "perly.y"
+  case 116:
+#line 887 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 116:
-#line 888 "perly.y"
+  case 117:
+#line 891 "perly.y"
     {   if (IVAL((ps[(2) - (3)].val.i_tkval)) != OP_REPEAT)
                                scalar((ps[(1) - (3)].val.opval));
                            (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
@@ -934,50 +939,50 @@ case 2:
                        ;}
     break;
 
-  case 117:
-#line 894 "perly.y"
-    { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
-                         TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
-    break;
-
   case 118:
-#line 898 "perly.y"
+#line 897 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 119:
-#line 902 "perly.y"
+#line 901 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 120:
-#line 906 "perly.y"
+#line 905 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 121:
-#line 910 "perly.y"
+#line 909 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 122:
-#line 914 "perly.y"
+#line 913 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 123:
-#line 918 "perly.y"
+#line 917 "perly.y"
+    { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
+                         TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
+                       ;}
+    break;
+
+  case 124:
+#line 921 "perly.y"
     {
                          (yyval.opval) = newRANGE(IVAL((ps[(2) - (3)].val.i_tkval)), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          DO_MAD({
@@ -991,29 +996,29 @@ case 2:
                        ;}
     break;
 
-  case 124:
-#line 930 "perly.y"
+  case 125:
+#line 933 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 125:
-#line 934 "perly.y"
+  case 126:
+#line 937 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 126:
-#line 938 "perly.y"
+  case 127:
+#line 941 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 127:
-#line 942 "perly.y"
+  case 128:
+#line 945 "perly.y"
     { (yyval.opval) = bind_match(IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),
                                ((yyval.opval)->op_type == OP_NOT
@@ -1022,15 +1027,15 @@ case 2:
                        ;}
     break;
 
-  case 128:
-#line 952 "perly.y"
+  case 129:
+#line 955 "perly.y"
     { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 129:
-#line 956 "perly.y"
+  case 130:
+#line 959 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)),
                                    (ps[(2) - (2)].val.opval)
@@ -1039,70 +1044,70 @@ case 2:
                        ;}
     break;
 
-  case 130:
-#line 963 "perly.y"
+  case 131:
+#line 966 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 131:
-#line 967 "perly.y"
+  case 132:
+#line 970 "perly.y"
     { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 132:
-#line 971 "perly.y"
+  case 133:
+#line 974 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 133:
-#line 976 "perly.y"
+  case 134:
+#line 979 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 134:
-#line 981 "perly.y"
+  case 135:
+#line 984 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        mod(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 135:
-#line 986 "perly.y"
+  case 136:
+#line 989 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        mod(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 136:
-#line 995 "perly.y"
+  case 137:
+#line 998 "perly.y"
     { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 137:
-#line 1000 "perly.y"
+  case 138:
+#line 1003 "perly.y"
     { (yyval.opval) = newANONLIST((OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']');
                        ;}
     break;
 
-  case 138:
-#line 1005 "perly.y"
+  case 139:
+#line 1008 "perly.y"
     { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';');
@@ -1110,8 +1115,8 @@ case 2:
                        ;}
     break;
 
-  case 139:
-#line 1011 "perly.y"
+  case 140:
+#line 1014 "perly.y"
     { (yyval.opval) = newANONHASH((OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';');
@@ -1119,8 +1124,8 @@ case 2:
                        ;}
     break;
 
-  case 140:
-#line 1017 "perly.y"
+  case 141:
+#line 1020 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -1129,22 +1134,22 @@ case 2:
                        ;}
     break;
 
-  case 141:
-#line 1028 "perly.y"
+  case 142:
+#line 1031 "perly.y"
     { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 142:
-#line 1032 "perly.y"
+  case 143:
+#line 1035 "perly.y"
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, scope((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
                        ;}
     break;
 
-  case 143:
-#line 1036 "perly.y"
+  case 144:
+#line 1039 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -1158,8 +1163,8 @@ case 2:
                        ;}
     break;
 
-  case 144:
-#line 1048 "perly.y"
+  case 145:
+#line 1051 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -1174,8 +1179,8 @@ case 2:
                        ;}
     break;
 
-  case 145:
-#line 1061 "perly.y"
+  case 146:
+#line 1064 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar((ps[(2) - (4)].val.opval)))), (OP*)NULL)); dep();
@@ -1185,8 +1190,8 @@ case 2:
                        ;}
     break;
 
-  case 146:
-#line 1069 "perly.y"
+  case 147:
+#line 1072 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                (ps[(4) - (5)].val.opval),
@@ -1197,81 +1202,81 @@ case 2:
                        ;}
     break;
 
-  case 151:
-#line 1085 "perly.y"
+  case 152:
+#line 1088 "perly.y"
     { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
-  case 152:
-#line 1090 "perly.y"
+  case 153:
+#line 1093 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, mod((ps[(2) - (2)].val.opval),OP_REFGEN));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 153:
-#line 1094 "perly.y"
+  case 154:
+#line 1097 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 154:
-#line 1096 "perly.y"
+  case 155:
+#line 1099 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k');
                        ;}
     break;
 
-  case 155:
-#line 1100 "perly.y"
+  case 156:
+#line 1103 "perly.y"
     { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 156:
-#line 1105 "perly.y"
+  case 157:
+#line 1108 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
                        ;}
     break;
 
-  case 157:
-#line 1110 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
-    break;
-
   case 158:
-#line 1112 "perly.y"
+#line 1113 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 159:
-#line 1114 "perly.y"
+#line 1115 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 160:
-#line 1116 "perly.y"
+#line 1117 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 161:
-#line 1118 "perly.y"
-    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
+#line 1119 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 162:
-#line 1120 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1121 "perly.y"
+    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
     break;
 
   case 163:
-#line 1122 "perly.y"
+#line 1123 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    break;
+
+  case 164:
+#line 1125 "perly.y"
     { (yyval.opval) = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -1282,8 +1287,8 @@ case 2:
                        ;}
     break;
 
-  case 164:
-#line 1131 "perly.y"
+  case 165:
+#line 1134 "perly.y"
     { (yyval.opval) = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1296,26 +1301,26 @@ case 2