├── .gitignore ├── README.txt ├── c.sh ├── StaticPreamble.pm ├── patch-5.10.1.patch ├── config-5.10.1.sh └── preamble-5.10.1.pm /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | /perl-5.10.1.tar.gz 3 | /pts-xstatic-latest.sfx.7z 4 | /*.tmp 5 | /lucid_dir 6 | /perl-5.10.1 7 | /pts_chroot_env_qq.sh 8 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | staticperl: statically linked Perl 5.10 for i386 Linux and FreeBSD 2 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3 | staticperl is a stripped-down version of Perl 5.10 precompiled and statically 4 | linked for Linux i386 (CPU model i686) and amd64 systems. staticperl has all 5 | C and Perl code embedded in the executable binary, so it doesn't read any 6 | external files (except for /dev/urandom and /dev/null) to operate. 7 | Typical use cases of staticperl are embedded and rescue Linux systems (e.g. 8 | where glibc is not available) and Docker images. 9 | 10 | staticperl is based on Perl 5.10.1, but it contains only a few standard Perl 11 | modules (e.g. integer, warnings, File::Glob and Cwd). Most notably, 12 | Encoding, Fcntl and Socket are missing. It's possible but tricky to modify 13 | the compilation script (c.sh) to add more modules. It's possible to add more 14 | Perl code, see below how. 15 | 16 | staticperl is linked against uClibc using pts-xstatic 17 | (https://github.com/pts/pts-clang-xstatic/blob/master/README.pts-xstatic.txt), 18 | that's why the binary size is so small. 19 | 20 | Usage 21 | ~~~~~ 22 | On a Linux i386 or amd64 system, run 23 | 24 | $ wget -O staticperl-5.10.1 http://github.com/pts/staticperl/releases/download/v2/staticperl-5.10.1.v2 25 | $ chmod +x staticperl-5.10.1 26 | $ ./staticperl-5.10.1 -e 'print "Hello, World!\n" 27 | Hello, World! 28 | 29 | How to add more Perl modules 30 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 | Use this command to get Perl code defining the Perl modules within the 32 | staticperl executable: 33 | 34 | $ ./staticperl-5.10.1 -e0 -mStaticPreamble=get >mypreamble.pm 35 | 36 | You can edit (extend) the file mypreamble.pm, and then update the 37 | executable using this command: 38 | 39 | $ ./staticperl-5.10.1 -e0 -mStaticPreamble=set stdin mypreamble.pm 53 | 54 | Please note that it's not possible to add C extensions (.xs, .so) to 55 | staticperl without recompiling it, i.e. modifying and running c.sh. 56 | 57 | Executable compression 58 | ~~~~~~~~~~~~~~~~~~~~~~ 59 | It's possible to compress the staticperl executable with UPX. If done so 60 | (with `upx --best --lzma'), the file size goes down from 1.102 MiB to 0.416 61 | MiB. 62 | 63 | Please note that getting and adding Perl modules (with -mStaticPreamble=...) 64 | works only if the executable isn't compressed (e.g. with UPX). If it is, you 65 | need to decompress it first. 66 | 67 | Alternatives 68 | ~~~~~~~~~~~~ 69 | There is another project called staticperl with automation for adding 70 | arbitrary Perl modules and C extensions from CPAN: 71 | https://metacpan.org/pod/distribution/App-Staticperl/staticperl.pod 72 | 73 | __END__ 74 | -------------------------------------------------------------------------------- /c.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -- 2 | # by pts@fazekas.hu at Thu Dec 27 15:35:44 CET 2018 3 | set -ex 4 | 5 | test -f preamble-5.10.1.pm 6 | test -f patch-5.10.1.patch 7 | test -f config-5.10.1.sh 8 | test -f StaticPreamble.pm 9 | 10 | if ! test -f perl-5.10.1.tar.gz; then 11 | wget -O perl-5.10.1.tar.gz.tmp http://www.cpan.org/src/perl-5.10.1.tar.gz 12 | mv perl-5.10.1.tar.gz.tmp perl-5.10.1.tar.gz 13 | fi 14 | if ! test -f pts-xstatic-latest.sfx.7z; then 15 | wget -O pts-xstatic-latest.sfx.7z.tmp http://pts.50.hu/files/pts-xstatic/pts-xstatic-latest.sfx.7z 16 | chmod +x pts-xstatic-latest.sfx.7z.tmp 17 | mv pts-xstatic-latest.sfx.7z.tmp pts-xstatic-latest.sfx.7z 18 | fi 19 | 20 | if ! test -f pts_chroot_env_qq.sh; then 21 | wget -O pts_chroot_env_qq.sh.tmp http://raw.githubusercontent.com/pts/pts-chroot-env-qq/master/pts_chroot_env_qq.sh 22 | chmod +x pts_chroot_env_qq.sh.tmp 23 | mv pts_chroot_env_qq.sh.tmp pts_chroot_env_qq.sh 24 | fi 25 | 26 | # TODO(pts): Add setup instructions for lucid_dir: 27 | if ! test -f lucid_dir/bin/bash; then 28 | sudo umount lucid_dir/proc ||: 29 | sudo umount lucid_dir/dev/pts ||: 30 | rm -rf lucid_dir lucid_dir.tmp 31 | ./pts_chroot_env_qq.sh pts-debootstrap lucid lucid_dir.tmp # Ubuntu 10.04 Lucid Lynx. 32 | mv lucid_dir.tmp lucid_dir 33 | test -f lucid_dir/bin/bash 34 | test -x lucid_dir/bin/bash 35 | else 36 | (cd lucid_dir && ../pts_chroot_env_qq.sh cd) || exit "$?" # Trigger sudo with password prompt. 37 | fi 38 | 39 | if ! test -f lucid_dir/usr/bin/gcc; then 40 | (cd lucid_dir && ../pts_chroot_env_qq.sh apt-get update) || exit "$?" 41 | (cd lucid_dir && ../pts_chroot_env_qq.sh apt-get -y install gcc make) || exit "$?" # gcc-4.4 42 | test -f lucid_dir/usr/bin/gcc 43 | test -x lucid_dir/usr/bin/gcc 44 | test -f lucid_dir/usr/bin/make 45 | test -x lucid_dir/usr/bin/make 46 | fi 47 | 48 | if ! test -f lucid_dir/tmp/perlsrc/Configure; then 49 | rm -rf lucid_dir/tmp/perl-5.10.1 lucid_dir/tmp/perlsrc 50 | (cd lucid_dir/tmp && tar xzvf ../../perl-5.10.1.tar.gz) || echo "$?" 51 | mv lucid_dir/tmp/perl-5.10.1 lucid_dir/tmp/perlsrc 52 | test -f lucid_dir/tmp/perlsrc/Configure 53 | test -f lucid_dir/tmp/perlsrc/perl.c 54 | fi 55 | 56 | if ! test -f lucid_dir/tmp/perlsrc/pts-xstatic/bin/xstatic; then 57 | (cd lucid_dir/tmp/perlsrc && ../../../pts-xstatic-latest.sfx.7z -y) || exit "$?" 58 | test -f lucid_dir/tmp/perlsrc/pts-xstatic/bin/xstatic 59 | test -x lucid_dir/tmp/perlsrc/pts-xstatic/bin/xstatic 60 | fi 61 | 62 | if ! test -f lucid_dir/tmp/perlsrc/Makefile; then 63 | (cd lucid_dir/tmp/perlsrc && patch -p1 <../../../patch-5.10.1.patch) || exit "$?" 64 | # !! What manual changes are we making to config-5.10.1.sh? 65 | ## SUXX: -Dusedl=n enables lots of modules linked statically 66 | ## !! Also add the .pm files for Fcntl IO Socket Sys/Hostname. 67 | ## !! Generate lib/ and list of all possible modules. 68 | ##(cd lucid_dir/tmp/perlsrc && ./pts_chroot_env_qq.sh sh Configure -ds -e -Dusedl=n -Dstatic_ext="") || exit "$?" 69 | ##(cd lucid_dir/tmp/perlsrc && ./pts_chroot_env_qq.sh sh Configure -ds -e -Dusedl=n -Dstatic_ext="Cwd File/Glob") || exit "$?" 70 | ##(cd lucid_dir/tmp/perlsrc && ./pts_chroot_env_qq.sh sh Configure -ds -e -Dusedl=n -Dstatic_ext="Cwd File/Glob Fcntl IO Socket Sys/Hostname B Compress/Raw/Bzip2 Compress/Raw/Zlib Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Filter/Util/Call Hash/Util Hash/Util/FieldHash I18N/Langinfo IO/Compress IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Storable Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize attrs mro re threads threads/shared Encode/Byte Encode/CN Encode/EBCDIC Encode/JP Encode/KR Encode/Symbol Encode/TW Encode/Unicode") || exit "$?" 71 | ##(cd lucid_dir/tmp/perlsrc && ./pts_chroot_env_qq.sh sh Configure -ds -e -Dusedl=y) || exit "$?" 72 | cp -a config-5.10.1.sh lucid_dir/tmp/perlsrc/config.sh 73 | (cd lucid_dir/tmp/perlsrc && ../../../pts_chroot_env_qq.sh sh Configure -S) || exit "$?" # Reads config.sh, runs **/*.SH to generate other files (e.g. Makefile). 74 | test -f lucid_dir/tmp/perlsrc/Makefile 75 | fi 76 | 77 | if ! test -f lucid_dir/tmp/perlsrc/preamble.pm; then 78 | cat StaticPreamble.pm preamble-5.10.1.pm >lucid_dir/tmp/perlsrc/preamble.pm 79 | fi 80 | 81 | if ! test -f lucid_dir/tmp/perlsrc/miniperl; then 82 | (cd lucid_dir/tmp/perlsrc && PATH="$PWD/pts-xstatic/bin:$PATH" ../../../pts_chroot_env_qq.sh make miniperl) || exit "$?" 83 | lucid_dir/tmp/perlsrc/miniperl -w -I. -e0 -mStaticPreamble=set stdin = $i + 2 and $args[$i] eq 'set') { 9 | $data = $args[$i + 1]; 10 | $i += 2; 11 | $data = join('', ) if $data eq "--stdin" or $data eq "stdin"; 12 | } elsif (@args > $i and $args[$i] eq 'get') { 13 | ++$i; 14 | } else { 15 | die "fatal: Missing or unknown command.\n"; 16 | } 17 | my $fn; 18 | if (@args > $i) { 19 | $fn = $args[$i++]; 20 | } else { 21 | $fn = $^X; 22 | die "fatal: Missing slash: $fn\n" if $fn !~ m@/@; 23 | } 24 | die "fatal: Too many command-line arguments.\n" if $i != @args; 25 | if (defined($data)) { 26 | # Remove comments. 27 | $data =~ s@^[ \t]*#.*\n?@@mg; 28 | $data =~ s@[\s;]+\Z(?!\n)@@; 29 | $data .= substr($data, -1) eq '}' ? "\n1" : "\n;1" if 30 | substr($data, -1) ne '1'; 31 | $data =~ s@\A[\s;]+@@; 32 | $data =~ s@\\@\\\\@g; 33 | $data =~ s@\0@\\\0@g; 34 | # We need the eval q\0...\0, because everything in PL_Preambleav after 35 | # an unescaped \n is ignored. But inside q... it's OK. 36 | # !! Get rid of @INC. 37 | $data = "BEGIN{eval q\0$data\0;die\$\@if\$\@}"; 38 | # print $data; exit; 39 | } 40 | my $f; 41 | # Not using '+<' to avoid ETXTBSY on $^X. 42 | die "fatal: Open $fn: $!\n" if !open($f, '<', $fn); 43 | my $got; 44 | die "fatal: Read $fn: $!\n" if !($got = sysread($f, $_, 8192)); 45 | die "fatal: Not a 32-bit MSB-first ELF v1 file.\n" if 46 | $got < 0x54 or !m@\A\x7fELF\x01\x01\x01@; 47 | my($e_phoff, $e_shoff, $e_flags, $e_ehsize, $e_phentsize, $e_phnum, 48 | $e_shentsize, $e_shnum, $e_shstrndx) = unpack('x28V3v6', $_); 49 | die "fatal: Bad e_phentsize.\n" if $e_phentsize != 0x20; 50 | die "fatal: Expected an exectuable ELF file.\n" if vec($_, 16, 8) != 2; 51 | $i = $e_phoff; 52 | die "fatal: Program header too long.\n" if (($got - $i) >> 5) < $e_phnum; 53 | my $phend = $i + ($e_phnum << 5); my $tofs = $phend; 54 | my($data_i, $data_p_offset); 55 | for (; $i < $phend; $i += 32) { 56 | my($p_type, $p_offset, $p_vaddr, $p_paddr, $p_filesz, $p_memsz, $p_flags, 57 | $p_align) = unpack('V8', substr($_, $i, 32)); 58 | next if $p_type != 1; # PT_LOAD. 59 | # Prevent upx CantPackException: Go-language PT_LOAD. 60 | # Prevent invalid Phdr p_offset; (without upx --force-exece). 61 | if (0 < $p_offset and $p_offset < 0x1000) { 62 | $p_vaddr -= $p_offset; 63 | $p_paddr -= $p_offset; 64 | $p_filesz += $p_offset; 65 | $p_memsz += $p_offset; 66 | $p_offset = 0; 67 | substr($_, $i, 32) = pack('V8', $p_type, $p_offset, $p_vaddr, $p_paddr, 68 | $p_filesz, $p_memsz, $p_flags, $p_align); 69 | } 70 | if ($p_offset + $p_filesz > $tofs) { 71 | ($data_i, $data_p_offset) = ($i, $p_offset); 72 | $tofs = $p_offset + $p_filesz; 73 | } 74 | } 75 | # ei_osabi = GNU/Linux. 76 | vec($_, 7, 8) = 3; 77 | # e_shoff = 0. 78 | substr($_, 32, 4) = "\0\0\0\0"; 79 | # e_shnum = e_shstrndx = 0. 80 | substr($_, 48, 4) = "\0\0\0\0"; 81 | die "fatal: Missing PT_LOAD sections.\n" if !defined($data_i); 82 | die "fatal: Seek near end $fn: $!\n" if 83 | (sysseek($f, $tofs - 8, 0) or 0) != $tofs - 8; 84 | my $buf; 85 | die "fatal: Read near end $fn: $!\n" if (sysread($f, $buf, 8) or 0) != 8; 86 | my($size2, $capacity) = unpack('VV', $buf); 87 | die "fatal: Size larger than capacity.\n" if $size2 > $capacity; 88 | die "fatal: Size2 too large.\n" if $size2 >> 31; 89 | die "fatal: Old data does not fit in executable.\n" if 90 | $phend + 13 + $size2 > $tofs; 91 | my $data_size = length($data); 92 | die "fatal: New data too long: new_size=$data_size capacity=$capacity" 93 | if defined($data) and $data_size > $capacity; 94 | die "fatal: Seek to data $fn: $!\n" if 95 | (sysseek($f, $tofs - 12 - $size2, 0) or 0) != $tofs - 12 - $size2; 96 | die "fatal: Read size $fn: $!\n" if (sysread($f, $buf, 4) or 0) != 4; 97 | my($size) = unpack('V', $buf); 98 | die "fatal: Size too large.\n" if $size > $size2; 99 | if (defined($data)) { 100 | substr($data, 0, 0) = pack('V', $data_size); 101 | $data .= pack('VV', $data_size, $capacity); 102 | $data_p_filesz = $tofs - $size2 + $data_size - $data_p_offset; 103 | substr($_, $data_i + 16, 4) = pack('V', $data_p_filesz); 104 | my $of; 105 | # Not modifying $fn to avoid ETXTBSY on $^X. 106 | unlink("$fn.tmp"); 107 | die "fatal: Open output $fn.tmp: $!\n" if !open($of, '>', "$fn.tmp"); 108 | die "fatal: Write $fn.tmp: $!\n" if 109 | (syswrite($of, $_, $phend) or 0) != $phend; 110 | die "fatal: Seek to phend $fn: $!\n" if 111 | (sysseek($f, $phend, 0) or 0) != $phend; 112 | for (my $copy_size = $tofs - 12 - $size2 - $phend; $copy_size > 0;) { 113 | my $asize = $copy_size > 65536 ? 65536 : $copy_size; 114 | die "fatal: Read copy from $fn: $!\n" if 115 | (sysread($f, $buf, $asize) or 0) != $asize; 116 | die "fatal: Write copy to $fn.tmp: $!\n" if 117 | (syswrite($of, $buf, $asize) or 0) != $asize; 118 | $copy_size -= $asize; 119 | } 120 | die "fatal: Write data to $fn.tmp: $!\n" if 121 | (syswrite($of, $data, length($data)) or 0) != length($data); 122 | die "fatal: Close $fn.tmp: $!\n" if !close($of); 123 | close($f); 124 | my @stat = stat($fn); 125 | die "fatal: Stat $fn: %!\n" if !@stat; 126 | my $mode = $stat[2] & 0777; 127 | die "fatal: Chmod $fn.tmp: $!\n" if !chmod($mode, "$fn.tmp"); 128 | die "fatal: Rename to $fn: $!\n" if !rename("$fn.tmp", "$fn"); 129 | } else { 130 | die "fatal: Read old data $fn: $!\n" if 131 | (sysread($f, $data, $size) or 0) != $size; 132 | close($f); 133 | die "fatal: Bad old data prefix.\n".substr($data,0,100) if 134 | $data !~ s@\ABEGIN\{(?:[\@]INC=\(\); ?)?eval q\0@@; 135 | die "fatal: Bad old data suffix.\n" if 136 | $data !~ s@(?:\A|\n+;?)1;?\n?\0; ?die\$[\@]if\$\@\}\n?\Z(?!\n)@\n1;\n@; 137 | $data =~ s@\A[\s;]+@@; 138 | my %r = ("\\"=>"\\", "0"=>"\0"); 139 | $data =~ s@\\([\\\0])@$r{$1}@ge; 140 | print $data; 141 | } 142 | } 143 | } 144 | 1; 145 | -------------------------------------------------------------------------------- /patch-5.10.1.patch: -------------------------------------------------------------------------------- 1 | --- perl-5.10.1.orig/perl.c 2009-04-22 20:07:41.000000000 +0200 2 | +++ perl-5.10.1/perl.c 2010-11-26 22:06:52.225163765 +0100 3 | @@ -1511,20 +1511,30 @@ 4 | #else 5 | #ifdef OS2 6 | sv_setpv(GvSVn(tmpgv), os2_execname(aTHX)); 7 | #else 8 | sv_setpv(GvSVn(tmpgv),PL_origargv[0]); 9 | #endif 10 | #endif 11 | } 12 | } 13 | 14 | +/* .dynbss will move it to the end of .data in the output file. */ 15 | +/* Using a struct to force 1-byte alignment (gcc-7.3 forces .align 4 in the .s file for __mode__(SI)). */ 16 | +/* Using a struct because gcc-7.3 puts global variables in reverse order in the .s file, gcc-4.4 puts them in normal order. */ 17 | +__attribute__((__aligned__(1), __section__(".dynbss"))) struct { 18 | + __attribute__((__packed__, __mode__(SI))) int size; 19 | + char data[1 << 24]; /* 16 MiB capacity for escaped preamble.pm. */ 20 | + __attribute__((__packed__, __mode__(SI))) int size2; 21 | + __attribute__((__packed__, __mode__(SI))) int capacity; 22 | +} mini_preamble = {0, "", sizeof(mini_preamble.data), sizeof(mini_preamble.data)}; 23 | + 24 | /* 25 | =for apidoc perl_parse 26 | 27 | Tells a Perl interpreter to parse a Perl script. See L. 28 | 29 | =cut 30 | */ 31 | 32 | int 33 | perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) 34 | @@ -1556,20 +1566,22 @@ 35 | const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG"); 36 | 37 | if (s && (atoi(s) == 1)) 38 | PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n", PL_rehash_seed); 39 | } 40 | #endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */ 41 | 42 | PL_origargc = argc; 43 | PL_origargv = argv; 44 | 45 | + Perl_av_create_and_push(aTHX_ &PL_preambleav, newSVpvn(mini_preamble.data, mini_preamble.size)); 46 | + 47 | if (PL_origalen != 0) { 48 | PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */ 49 | } 50 | else { 51 | /* Set PL_origalen be the sum of the contiguous argv[] 52 | * elements plus the size of the env in case that it is 53 | * contiguous with the argv[]. This is used in mg.c:Perl_magic_set() 54 | * as the maximum modifiable length of $0. In the worst case 55 | * the area we are able to modify is limited to the size of 56 | * the original argv[0]. (See below for 'contiguous', though.) 57 | @@ -4869,25 +4881,25 @@ 58 | do { incpush(buf,TRUE,TRUE,TRUE,FALSE); } while (my_trnlnm("PERL5LIB",buf,++idx)); 59 | else 60 | while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE,TRUE,FALSE); 61 | #endif /* VMS */ 62 | } 63 | 64 | /* Use the ~-expanded versions of APPLLIB (undocumented), 65 | ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB 66 | */ 67 | #ifdef APPLLIB_EXP 68 | - incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE); 69 | + /*incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE);*/ 70 | #endif 71 | 72 | #ifdef ARCHLIB_EXP 73 | - incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE); 74 | + /*incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);*/ 75 | #endif 76 | #ifdef MACOS_TRADITIONAL 77 | { 78 | Stat_t tmpstatbuf; 79 | SV * privdir = newSV(0); 80 | char * macperl = PerlEnv_getenv("MACPERL"); 81 | 82 | if (!macperl) 83 | macperl = ""; 84 | 85 | @@ -4900,73 +4912,73 @@ 86 | 87 | SvREFCNT_dec(privdir); 88 | } 89 | if (!PL_tainting) 90 | incpush(":", FALSE, FALSE, TRUE, FALSE); 91 | #else 92 | #ifndef PRIVLIB_EXP 93 | # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl" 94 | #endif 95 | #if defined(WIN32) 96 | - incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE); 97 | + /*incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);*/ 98 | #else 99 | - incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE); 100 | + /*incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);*/ 101 | #endif 102 | 103 | #ifdef SITEARCH_EXP 104 | /* sitearch is always relative to sitelib on Windows for 105 | * DLL-based path intuition to work correctly */ 106 | # if !defined(WIN32) 107 | - incpush(SITEARCH_EXP, FALSE, FALSE, TRUE, TRUE); 108 | + /*incpush(SITEARCH_EXP, FALSE, FALSE, TRUE, TRUE);*/ 109 | # endif 110 | #endif 111 | 112 | #ifdef SITELIB_EXP 113 | # if defined(WIN32) 114 | /* this picks up sitearch as well */ 115 | - incpush(SITELIB_EXP, TRUE, FALSE, TRUE, TRUE); 116 | + /*incpush(SITELIB_EXP, TRUE, FALSE, TRUE, TRUE);*/ 117 | # else 118 | - incpush(SITELIB_EXP, FALSE, FALSE, TRUE, TRUE); 119 | + /*incpush(SITELIB_EXP, FALSE, FALSE, TRUE, TRUE);*/ 120 | # endif 121 | #endif 122 | 123 | #if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST) 124 | /* Search for version-specific dirs below here */ 125 | - incpush(SITELIB_STEM, FALSE, TRUE, TRUE, TRUE); 126 | + /*incpush(SITELIB_STEM, FALSE, TRUE, TRUE, TRUE);*/ 127 | #endif 128 | 129 | #ifdef PERL_VENDORARCH_EXP 130 | /* vendorarch is always relative to vendorlib on Windows for 131 | * DLL-based path intuition to work correctly */ 132 | # if !defined(WIN32) 133 | - incpush(PERL_VENDORARCH_EXP, FALSE, FALSE, TRUE, TRUE); 134 | + /*incpush(PERL_VENDORARCH_EXP, FALSE, FALSE, TRUE, TRUE);*/ 135 | # endif 136 | #endif 137 | 138 | #ifdef PERL_VENDORLIB_EXP 139 | # if defined(WIN32) 140 | - incpush(PERL_VENDORLIB_EXP, TRUE, FALSE, TRUE, TRUE); /* this picks up vendorarch as well */ 141 | + /*incpush(PERL_VENDORLIB_EXP, TRUE, FALSE, TRUE, TRUE);*/ /* this picks up vendorarch as well */ 142 | # else 143 | - incpush(PERL_VENDORLIB_EXP, FALSE, FALSE, TRUE, TRUE); 144 | + /*incpush(PERL_VENDORLIB_EXP, FALSE, FALSE, TRUE, TRUE);*/ 145 | # endif 146 | #endif 147 | 148 | #ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */ 149 | - incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE); 150 | + /*incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE);*/ 151 | #endif 152 | 153 | #ifdef PERL_OTHERLIBDIRS 154 | - incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE); 155 | + /*incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE);*/ 156 | #endif 157 | 158 | - if (!PL_tainting) 159 | - incpush(".", FALSE, FALSE, TRUE, FALSE); 160 | + /*if (!PL_tainting) 161 | + incpush(".", FALSE, FALSE, TRUE, FALSE);*/ 162 | #endif /* MACOS_TRADITIONAL */ 163 | } 164 | 165 | #if defined(DOSISH) || defined(EPOC) || defined(__SYMBIAN32__) 166 | # define PERLLIB_SEP ';' 167 | #else 168 | # if defined(VMS) 169 | # define PERLLIB_SEP '|' 170 | # else 171 | # if defined(MACOS_TRADITIONAL) 172 | --- perl-5.10.1.orig/Configure 2009-08-18 21:03:53.000000000 +0200 173 | +++ perl-5.10.1/Configure 2010-11-26 21:00:01.284891584 +0100 174 | @@ -5139,25 +5139,25 @@ 175 | eval $checkccflag 176 | ;; 177 | esac 178 | 179 | # on x86_64 (at least) we require an extra library (libssp) in the 180 | # link command line. This library is not named, so I infer that it is 181 | # an implementation detail that may change. Hence the safest approach 182 | # is to add the flag to the flags passed to the compiler at link time, 183 | # as that way the compiler can do the right implementation dependant 184 | # thing. (NWC) 185 | - case "$gccversion" in 186 | - ?*) set stack-protector -fstack-protector 187 | - eval $checkccflag 188 | - ;; 189 | - esac 190 | + #case "$gccversion" in 191 | + #?*) set stack-protector -fstack-protector 192 | + # eval $checkccflag 193 | + # ;; 194 | + #esac 195 | ;; 196 | esac 197 | 198 | case "$mips_type" in 199 | *BSD*|'') inclwanted="$locincpth $usrinc";; 200 | *) inclwanted="$locincpth $inclwanted $usrinc/bsd";; 201 | esac 202 | for thisincl in $inclwanted; do 203 | if $test -d $thisincl; then 204 | if $test x$thisincl != x$usrinc; then 205 | -------------------------------------------------------------------------------- /config-5.10.1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # This file was produced by running the Configure script. It holds all the 4 | # definitions figured out by Configure. Should you modify one of these values, 5 | # do not forget to propagate your changes by running "Configure -der". You may 6 | # instead choose to run each of the .SH files by yourself, or "Configure -S". 7 | # 8 | 9 | # Package name : perl5 10 | # Source directory : . 11 | # Configuration time: Fri Dec 28 00:45:15 UTC 2018 12 | # Configured by : pts 13 | # Target system : linux pts-test1 4.18.10-1rodete2-amd64 #1 smp debian 4.18.10-1rodete2 (2018-10-09) i686 gnulinux 14 | 15 | : Configure command line arguments. 16 | config_arg0='Configure' 17 | config_args='-ds -e -Dusedl=n -Dstatic_ext=Cwd File/Glob' 18 | config_argc=4 19 | config_arg1='-ds' 20 | config_arg2='-e' 21 | config_arg3='-Dusedl=n' 22 | config_arg4='-Dstatic_ext=Cwd File/Glob' 23 | 24 | Author='' 25 | Date='$Date' 26 | Header='' 27 | Id='$Id' 28 | Locker='' 29 | Log='$Log' 30 | RCSfile='$RCSfile' 31 | Revision='$Revision' 32 | Source='' 33 | State='' 34 | _a='.a' 35 | _exe='' 36 | _o='.o' 37 | afs='false' 38 | afsroot='/afs' 39 | alignbytes='4' 40 | ansi2knr='' 41 | aphostname='/bin/hostname' 42 | api_revision='5' 43 | api_subversion='0' 44 | api_version='10' 45 | api_versionstring='5.10.0' 46 | ar='ar' 47 | archlib='/usr/local/lib/perl5/5.10.1/i686-linux' 48 | archlibexp='/usr/local/lib/perl5/5.10.1/i686-linux' 49 | archname64='' 50 | archname='i686-linux' 51 | archobjs='' 52 | asctime_r_proto='0' 53 | awk='awk' 54 | baserev='5.0' 55 | bash='' 56 | bin='/usr/local/bin' 57 | binexp='/usr/local/bin' 58 | bison='bison' 59 | byacc='byacc' 60 | byteorder='1234' 61 | c='' 62 | castflags='0' 63 | cat='cat' 64 | cc="xstatic gcc -fno-pic -march=i686 -mtune=generic" 65 | cccdlflags='' 66 | ccdlflags='' 67 | ccflags='-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' 68 | ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' 69 | ccname='gcc' 70 | ccsymbols='' 71 | ccversion='' 72 | cf_by='pts' 73 | cf_email='pts@pts-test1.(none)' 74 | cf_time='Fri Dec 28 00:45:15 UTC 2018' 75 | chgrp='' 76 | chmod='chmod' 77 | chown='' 78 | clocktype='clock_t' 79 | comm='comm' 80 | compress='' 81 | contains='grep' 82 | cp='cp' 83 | cpio='' 84 | cpp='cpp' 85 | cpp_stuff='42' 86 | cppccsymbols='_FORTIFY_SOURCE=2' 87 | cppflags='-fno-strict-aliasing -pipe -I/usr/local/include' 88 | cpplast='-' 89 | cppminus='-' 90 | cpprun='cc -E' 91 | cppstdin='cc -E' 92 | cppsymbols='_FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200809L _POSIX_SOURCE=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short\ unsigned\ int __CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=2 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GLIBC_MINOR__=11 __GLIBC__=2 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=3 __GNUC__=4 __GNU_LIBRARY__=6 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807LL __INTMAX_TYPE__=long\ long\ int __INT_MAX__=2147483647 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=2147483647L __PTRDIFF_TYPE__=int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=12 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=4 __SIZEOF_POINTER__=4 __SIZEOF_PTRDIFF_T__=4 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=4 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=unsigned\ int __SSP__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long\ long\ unsigned\ int __USER_LABEL_PREFIX__= __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_POSIX=1 __USE_SVID=1 __VERSION__="4.4.3" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned\ int __gnu_linux__=1 __i386=1 __i386__=1 __i486=1 __i486__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 i386=1 linux=1 unix=1' 93 | crypt_r_proto='0' 94 | cryptlib='' 95 | csh='csh' 96 | ctermid_r_proto='0' 97 | ctime_r_proto='0' 98 | d_Gconvert='gcvt((x),(n),(b))' 99 | d_PRIEUldbl='define' 100 | d_PRIFUldbl='define' 101 | d_PRIGUldbl='define' 102 | d_PRIXU64='define' 103 | d_PRId64='define' 104 | d_PRIeldbl='define' 105 | d_PRIfldbl='define' 106 | d_PRIgldbl='define' 107 | d_PRIi64='define' 108 | d_PRIo64='define' 109 | d_PRIu64='define' 110 | d_PRIx64='define' 111 | d_SCNfldbl='define' 112 | d__fwalk='undef' 113 | d_access='define' 114 | d_accessx='undef' 115 | d_aintl='undef' 116 | d_alarm='define' 117 | d_archlib='define' 118 | d_asctime64='undef' 119 | d_asctime_r='undef' 120 | d_atolf='undef' 121 | d_atoll='define' 122 | d_attribute_deprecated='define' 123 | d_attribute_format='define' 124 | d_attribute_malloc='define' 125 | d_attribute_nonnull='define' 126 | d_attribute_noreturn='define' 127 | d_attribute_pure='define' 128 | d_attribute_unused='define' 129 | d_attribute_warn_unused_result='define' 130 | d_bcmp='define' 131 | d_bcopy='define' 132 | d_bsd='undef' 133 | d_bsdgetpgrp='undef' 134 | d_bsdsetpgrp='undef' 135 | d_builtin_choose_expr='define' 136 | d_builtin_expect='define' 137 | d_bzero='define' 138 | d_c99_variadic_macros='define' 139 | d_casti32='undef' 140 | d_castneg='define' 141 | d_charvspr='undef' 142 | d_chown='define' 143 | d_chroot='define' 144 | d_chsize='undef' 145 | d_class='undef' 146 | d_clearenv='define' 147 | d_closedir='define' 148 | d_cmsghdr_s='define' 149 | d_const='define' 150 | d_copysignl='define' 151 | d_cplusplus='undef' 152 | d_crypt='define' 153 | d_crypt_r='undef' 154 | d_csh='undef' 155 | d_ctermid='define' 156 | d_ctermid_r='undef' 157 | d_ctime64='undef' 158 | d_ctime_r='undef' 159 | d_cuserid='define' 160 | d_dbl_dig='define' 161 | d_dbminitproto='undef' 162 | d_difftime64='undef' 163 | d_difftime='define' 164 | d_dir_dd_fd='undef' 165 | d_dirfd='define' 166 | d_dirnamlen='undef' 167 | d_dlerror='define' 168 | d_dlopen='define' 169 | d_dlsymun='undef' 170 | d_dosuid='undef' 171 | d_drand48_r='undef' 172 | d_drand48proto='define' 173 | d_dup2='define' 174 | d_eaccess='undef' 175 | d_endgrent='define' 176 | d_endgrent_r='undef' 177 | d_endhent='define' 178 | d_endhostent_r='undef' 179 | d_endnent='define' 180 | d_endnetent_r='undef' 181 | d_endpent='define' 182 | d_endprotoent_r='undef' 183 | d_endpwent='define' 184 | d_endpwent_r='undef' 185 | d_endsent='define' 186 | d_endservent_r='undef' 187 | d_eofnblk='define' 188 | d_eunice='undef' 189 | d_faststdio='define' 190 | d_fchdir='define' 191 | d_fchmod='define' 192 | d_fchown='define' 193 | d_fcntl='define' 194 | d_fcntl_can_lock='define' 195 | d_fd_macros='define' 196 | d_fd_set='define' 197 | d_fds_bits='undef' 198 | d_fgetpos='define' 199 | d_finite='define' 200 | d_finitel='define' 201 | d_flexfnam='define' 202 | d_flock='define' 203 | d_flockproto='define' 204 | d_fork='define' 205 | d_fp_class='undef' 206 | d_fpathconf='define' 207 | d_fpclass='undef' 208 | d_fpclassify='undef' 209 | d_fpclassl='undef' 210 | d_fpos64_t='undef' 211 | d_frexpl='define' 212 | d_fs_data_s='undef' 213 | d_fseeko='define' 214 | d_fsetpos='define' 215 | d_fstatfs='define' 216 | d_fstatvfs='define' 217 | d_fsync='define' 218 | d_ftello='define' 219 | d_ftime='undef' 220 | d_futimes='undef' 221 | d_gdbm_ndbm_h_uses_prototypes='undef' 222 | d_gdbmndbm_h_uses_prototypes='undef' 223 | d_getaddrinfo='define' 224 | d_getcwd='define' 225 | d_getespwnam='undef' 226 | d_getfsstat='undef' 227 | d_getgrent='define' 228 | d_getgrent_r='undef' 229 | d_getgrgid_r='undef' 230 | d_getgrnam_r='undef' 231 | d_getgrps='define' 232 | d_gethbyaddr='define' 233 | d_gethbyname='define' 234 | d_gethent='define' 235 | d_gethname='define' 236 | d_gethostbyaddr_r='undef' 237 | d_gethostbyname_r='undef' 238 | d_gethostent_r='undef' 239 | d_gethostprotos='define' 240 | d_getitimer='define' 241 | d_getlogin='define' 242 | d_getlogin_r='undef' 243 | d_getmnt='undef' 244 | d_getmntent='define' 245 | d_getnameinfo='define' 246 | d_getnbyaddr='define' 247 | d_getnbyname='define' 248 | d_getnent='define' 249 | d_getnetbyaddr_r='undef' 250 | d_getnetbyname_r='undef' 251 | d_getnetent_r='undef' 252 | d_getnetprotos='define' 253 | d_getpagsz='define' 254 | d_getpbyname='define' 255 | d_getpbynumber='define' 256 | d_getpent='define' 257 | d_getpgid='define' 258 | d_getpgrp2='undef' 259 | d_getpgrp='define' 260 | d_getppid='define' 261 | d_getprior='define' 262 | d_getprotobyname_r='undef' 263 | d_getprotobynumber_r='undef' 264 | d_getprotoent_r='undef' 265 | d_getprotoprotos='define' 266 | d_getprpwnam='undef' 267 | d_getpwent='define' 268 | d_getpwent_r='undef' 269 | d_getpwnam_r='undef' 270 | d_getpwuid_r='undef' 271 | d_getsbyname='define' 272 | d_getsbyport='define' 273 | d_getsent='define' 274 | d_getservbyname_r='undef' 275 | d_getservbyport_r='undef' 276 | d_getservent_r='undef' 277 | d_getservprotos='define' 278 | d_getspnam='define' 279 | d_getspnam_r='undef' 280 | d_gettimeod='define' 281 | d_gmtime64='undef' 282 | d_gmtime_r='undef' 283 | d_gnulibc='define' 284 | d_grpasswd='define' 285 | d_hasmntopt='define' 286 | d_htonl='define' 287 | d_ilogbl='define' 288 | d_inc_version_list='undef' 289 | d_index='undef' 290 | d_inetaton='define' 291 | d_inetntop='define' 292 | d_inetpton='define' 293 | d_int64_t='define' 294 | d_isascii='define' 295 | d_isfinite='undef' 296 | d_isinf='define' 297 | d_isnan='define' 298 | d_isnanl='define' 299 | d_killpg='define' 300 | d_lchown='define' 301 | d_ldbl_dig='define' 302 | d_libm_lib_version='define' 303 | d_link='define' 304 | d_localtime64='undef' 305 | d_localtime_r='undef' 306 | d_localtime_r_needs_tzset='undef' 307 | d_locconv='define' 308 | d_lockf='define' 309 | d_longdbl='define' 310 | d_longlong='define' 311 | d_lseekproto='define' 312 | d_lstat='define' 313 | d_madvise='define' 314 | d_malloc_good_size='undef' 315 | d_malloc_size='undef' 316 | d_mblen='define' 317 | d_mbstowcs='define' 318 | d_mbtowc='define' 319 | d_memchr='define' 320 | d_memcmp='define' 321 | d_memcpy='define' 322 | d_memmove='define' 323 | d_memset='define' 324 | d_mkdir='define' 325 | d_mkdtemp='define' 326 | d_mkfifo='define' 327 | d_mkstemp='define' 328 | d_mkstemps='define' 329 | d_mktime64='undef' 330 | d_mktime='define' 331 | d_mmap='define' 332 | d_modfl='define' 333 | d_modfl_pow32_bug='undef' 334 | d_modflproto='define' 335 | d_mprotect='define' 336 | d_msg='define' 337 | d_msg_ctrunc='define' 338 | d_msg_dontroute='define' 339 | d_msg_oob='define' 340 | d_msg_peek='define' 341 | d_msg_proxy='define' 342 | d_msgctl='define' 343 | d_msgget='define' 344 | d_msghdr_s='define' 345 | d_msgrcv='define' 346 | d_msgsnd='define' 347 | d_msync='define' 348 | d_munmap='define' 349 | d_mymalloc='undef' 350 | d_ndbm='undef' 351 | d_ndbm_h_uses_prototypes='undef' 352 | d_nice='define' 353 | d_nl_langinfo='define' 354 | d_nv_preserves_uv='define' 355 | d_nv_zero_is_allbits_zero='define' 356 | d_off64_t='undef' 357 | d_old_pthread_create_joinable='undef' 358 | d_oldpthreads='undef' 359 | d_oldsock='undef' 360 | d_open3='define' 361 | d_pathconf='define' 362 | d_pause='define' 363 | d_perl_otherlibdirs='undef' 364 | d_phostname='undef' 365 | d_pipe='define' 366 | d_poll='define' 367 | d_portable='define' 368 | d_printf_format_null='define' 369 | d_procselfexe='define' 370 | d_pseudofork='undef' 371 | d_pthread_atfork='undef' 372 | d_pthread_attr_setscope='define' 373 | d_pthread_yield='undef' 374 | d_pwage='undef' 375 | d_pwchange='undef' 376 | d_pwclass='undef' 377 | d_pwcomment='undef' 378 | d_pwexpire='undef' 379 | d_pwgecos='define' 380 | d_pwpasswd='define' 381 | d_pwquota='undef' 382 | d_qgcvt='define' 383 | d_quad='define' 384 | d_random_r='undef' 385 | d_readdir64_r='undef' 386 | d_readdir='define' 387 | d_readdir_r='undef' 388 | d_readlink='define' 389 | d_readv='define' 390 | d_recvmsg='define' 391 | d_rename='define' 392 | d_rewinddir='define' 393 | d_rmdir='define' 394 | d_safebcpy='undef' 395 | d_safemcpy='undef' 396 | d_sanemcmp='define' 397 | d_sbrkproto='define' 398 | d_scalbnl='define' 399 | d_sched_yield='define' 400 | d_scm_rights='define' 401 | d_seekdir='define' 402 | d_select='define' 403 | d_sem='define' 404 | d_semctl='define' 405 | d_semctl_semid_ds='define' 406 | d_semctl_semun='define' 407 | d_semget='define' 408 | d_semop='define' 409 | d_sendmsg='define' 410 | d_setegid='define' 411 | d_seteuid='define' 412 | d_setgrent='define' 413 | d_setgrent_r='undef' 414 | d_setgrps='define' 415 | d_sethent='define' 416 | d_sethostent_r='undef' 417 | d_setitimer='define' 418 | d_setlinebuf='define' 419 | d_setlocale='define' 420 | d_setlocale_r='undef' 421 | d_setnent='define' 422 | d_setnetent_r='undef' 423 | d_setpent='define' 424 | d_setpgid='define' 425 | d_setpgrp2='undef' 426 | d_setpgrp='define' 427 | d_setprior='define' 428 | d_setproctitle='undef' 429 | d_setprotoent_r='undef' 430 | d_setpwent='define' 431 | d_setpwent_r='undef' 432 | d_setregid='define' 433 | d_setresgid='define' 434 | d_setresuid='define' 435 | d_setreuid='define' 436 | d_setrgid='undef' 437 | d_setruid='undef' 438 | d_setsent='define' 439 | d_setservent_r='undef' 440 | d_setsid='define' 441 | d_setvbuf='define' 442 | d_sfio='undef' 443 | d_shm='define' 444 | d_shmat='define' 445 | d_shmatprototype='define' 446 | d_shmctl='define' 447 | d_shmdt='define' 448 | d_shmget='define' 449 | d_sigaction='define' 450 | d_signbit='define' 451 | d_sigprocmask='define' 452 | d_sigsetjmp='define' 453 | d_sitearch='define' 454 | d_snprintf='define' 455 | d_sockatmark='define' 456 | d_sockatmarkproto='define' 457 | d_socket='define' 458 | d_socklen_t='define' 459 | d_sockpair='define' 460 | d_socks5_init='undef' 461 | d_sprintf_returns_strlen='define' 462 | d_sqrtl='define' 463 | d_srand48_r='undef' 464 | d_srandom_r='undef' 465 | d_sresgproto='undef' 466 | d_sresuproto='undef' 467 | d_statblks='define' 468 | d_statfs_f_flags='undef' 469 | d_statfs_s='define' 470 | d_statvfs='define' 471 | d_stdio_cnt_lval='undef' 472 | d_stdio_ptr_lval='define' 473 | d_stdio_ptr_lval_nochange_cnt='undef' 474 | d_stdio_ptr_lval_sets_cnt='define' 475 | d_stdio_stream_array='undef' 476 | d_stdiobase='undef' 477 | d_stdstdio='undef' 478 | d_strchr='define' 479 | d_strcoll='define' 480 | d_strctcpy='define' 481 | d_strerrm='strerror(e)' 482 | d_strerror='define' 483 | d_strerror_r='undef' 484 | d_strftime='define' 485 | d_strlcat='undef' 486 | d_strlcpy='undef' 487 | d_strtod='define' 488 | d_strtol='define' 489 | d_strtold='define' 490 | d_strtoll='define' 491 | d_strtoq='define' 492 | d_strtoul='define' 493 | d_strtoull='define' 494 | d_strtouq='define' 495 | d_strxfrm='define' 496 | d_suidsafe='undef' 497 | d_symlink='define' 498 | d_syscall='define' 499 | d_syscallproto='define' 500 | d_sysconf='define' 501 | d_sysernlst='' 502 | d_syserrlst='define' 503 | d_system='define' 504 | d_tcgetpgrp='define' 505 | d_tcsetpgrp='define' 506 | d_telldir='define' 507 | d_telldirproto='define' 508 | d_time='define' 509 | d_timegm='define' 510 | d_times='define' 511 | d_tm_tm_gmtoff='define' 512 | d_tm_tm_zone='define' 513 | d_tmpnam_r='undef' 514 | d_truncate='define' 515 | d_ttyname_r='undef' 516 | d_tzname='define' 517 | d_u32align='undef' 518 | d_ualarm='define' 519 | d_umask='define' 520 | d_uname='define' 521 | d_union_semun='undef' 522 | d_unordered='undef' 523 | d_unsetenv='define' 524 | d_usleep='define' 525 | d_usleepproto='define' 526 | d_ustat='define' 527 | d_vendorarch='undef' 528 | d_vendorbin='undef' 529 | d_vendorlib='undef' 530 | d_vendorscript='undef' 531 | d_vfork='undef' 532 | d_void_closedir='undef' 533 | d_voidsig='define' 534 | d_voidtty='' 535 | d_volatile='define' 536 | d_vprintf='define' 537 | d_vsnprintf='define' 538 | d_wait4='define' 539 | d_waitpid='define' 540 | d_wcstombs='define' 541 | d_wctomb='define' 542 | d_writev='define' 543 | d_xenix='undef' 544 | date='date' 545 | db_hashtype='u_int32_t' 546 | db_prefixtype='size_t' 547 | db_version_major='' 548 | db_version_minor='' 549 | db_version_patch='' 550 | defvoidused='15' 551 | direntrytype='struct dirent' 552 | dlext='none' 553 | dlsrc='dl_none.xs' 554 | doublesize='8' 555 | drand01='drand48()' 556 | drand48_r_proto='0' 557 | dtrace='' 558 | dynamic_ext='' 559 | eagain='EAGAIN' 560 | ebcdic='undef' 561 | echo='echo' 562 | egrep='egrep' 563 | emacs='' 564 | endgrent_r_proto='0' 565 | endhostent_r_proto='0' 566 | endnetent_r_proto='0' 567 | endprotoent_r_proto='0' 568 | endpwent_r_proto='0' 569 | endservent_r_proto='0' 570 | eunicefix=':' 571 | exe_ext='' 572 | expr='expr' 573 | extensions='Cwd File/Glob Attribute/Handlers Errno Module/Pluggable Safe Test/Harness' 574 | extern_C='extern' 575 | extras='' 576 | fflushNULL='define' 577 | fflushall='undef' 578 | find='' 579 | firstmakefile='makefile' 580 | flex='' 581 | fpossize='16' 582 | fpostype='fpos_t' 583 | freetype='void' 584 | from=':' 585 | full_ar='/usr/bin/ar' 586 | full_csh='csh' 587 | full_sed='/bin/sed' 588 | gccansipedantic='' 589 | gccosandvers='' 590 | gccversion='4.4.3' 591 | getgrent_r_proto='0' 592 | getgrgid_r_proto='0' 593 | getgrnam_r_proto='0' 594 | gethostbyaddr_r_proto='0' 595 | gethostbyname_r_proto='0' 596 | gethostent_r_proto='0' 597 | getlogin_r_proto='0' 598 | getnetbyaddr_r_proto='0' 599 | getnetbyname_r_proto='0' 600 | getnetent_r_proto='0' 601 | getprotobyname_r_proto='0' 602 | getprotobynumber_r_proto='0' 603 | getprotoent_r_proto='0' 604 | getpwent_r_proto='0' 605 | getpwnam_r_proto='0' 606 | getpwuid_r_proto='0' 607 | getservbyname_r_proto='0' 608 | getservbyport_r_proto='0' 609 | getservent_r_proto='0' 610 | getspnam_r_proto='0' 611 | gidformat='"lu"' 612 | gidsign='1' 613 | gidsize='4' 614 | gidtype='gid_t' 615 | glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib ' 616 | gmake='gmake' 617 | gmtime_r_proto='0' 618 | gnulibc_version='2.11.1' 619 | grep='grep' 620 | groupcat='cat /etc/group' 621 | groupstype='gid_t' 622 | gzip='gzip' 623 | h_fcntl='false' 624 | h_sysfile='true' 625 | hint='recommended' 626 | hostcat='' 627 | html1dir=' ' 628 | html1direxp='' 629 | html3dir=' ' 630 | html3direxp='' 631 | i16size='2' 632 | i16type='short' 633 | i32size='4' 634 | i32type='long' 635 | i64size='8' 636 | i64type='long long' 637 | i8size='1' 638 | i8type='signed char' 639 | i_arpainet='define' 640 | i_assert='define' 641 | i_bsdioctl='' 642 | i_crypt='define' 643 | i_db='undef' 644 | i_dbm='undef' 645 | i_dirent='define' 646 | i_dld='undef' 647 | i_dlfcn='define' 648 | i_fcntl='undef' 649 | i_float='define' 650 | i_fp='undef' 651 | i_fp_class='undef' 652 | i_gdbm='undef' 653 | i_gdbm_ndbm='undef' 654 | i_gdbmndbm='undef' 655 | i_grp='define' 656 | i_ieeefp='undef' 657 | i_inttypes='define' 658 | i_langinfo='define' 659 | i_libutil='undef' 660 | i_limits='define' 661 | i_locale='define' 662 | i_machcthr='undef' 663 | i_malloc='define' 664 | i_mallocmalloc='undef' 665 | i_math='define' 666 | i_memory='undef' 667 | i_mntent='define' 668 | i_ndbm='undef' 669 | i_netdb='define' 670 | i_neterrno='undef' 671 | i_netinettcp='define' 672 | i_niin='define' 673 | i_poll='define' 674 | i_prot='undef' 675 | i_pthread='define' 676 | i_pwd='define' 677 | i_rpcsvcdbm='undef' 678 | i_sfio='undef' 679 | i_sgtty='undef' 680 | i_shadow='define' 681 | i_socks='undef' 682 | i_stdarg='define' 683 | i_stddef='define' 684 | i_stdlib='define' 685 | i_string='define' 686 | i_sunmath='undef' 687 | i_sysaccess='undef' 688 | i_sysdir='define' 689 | i_sysfile='define' 690 | i_sysfilio='undef' 691 | i_sysin='undef' 692 | i_sysioctl='define' 693 | i_syslog='define' 694 | i_sysmman='define' 695 | i_sysmode='undef' 696 | i_sysmount='define' 697 | i_sysndir='undef' 698 | i_sysparam='define' 699 | i_syspoll='define' 700 | i_sysresrc='define' 701 | i_syssecrt='undef' 702 | i_sysselct='define' 703 | i_syssockio='undef' 704 | i_sysstat='define' 705 | i_sysstatfs='define' 706 | i_sysstatvfs='define' 707 | i_systime='define' 708 | i_systimek='undef' 709 | i_systimes='define' 710 | i_systypes='define' 711 | i_sysuio='define' 712 | i_sysun='define' 713 | i_sysutsname='define' 714 | i_sysvfs='define' 715 | i_syswait='define' 716 | i_termio='undef' 717 | i_termios='define' 718 | i_time='define' 719 | i_unistd='define' 720 | i_ustat='define' 721 | i_utime='define' 722 | i_values='define' 723 | i_varargs='undef' 724 | i_varhdr='stdarg.h' 725 | i_vfork='undef' 726 | ignore_versioned_solibs='y' 727 | inc_version_list=' ' 728 | inc_version_list_init='0' 729 | incpath='' 730 | inews='' 731 | initialinstalllocation='/usr/local/bin' 732 | installarchlib='/usr/local/lib/perl5/5.10.1/i686-linux' 733 | installbin='/usr/local/bin' 734 | installhtml1dir='' 735 | installhtml3dir='' 736 | installman1dir='' 737 | installman3dir='' 738 | installprefix='/usr/local' 739 | installprefixexp='/usr/local' 740 | installprivlib='/usr/local/lib/perl5/5.10.1' 741 | installscript='/usr/local/bin' 742 | installsitearch='/usr/local/lib/perl5/site_perl/5.10.1/i686-linux' 743 | installsitebin='/usr/local/bin' 744 | installsitehtml1dir='' 745 | installsitehtml3dir='' 746 | installsitelib='/usr/local/lib/perl5/site_perl/5.10.1' 747 | installsiteman1dir='' 748 | installsiteman3dir='' 749 | installsitescript='/usr/local/bin' 750 | installstyle='lib/perl5' 751 | installusrbinperl='undef' 752 | installvendorarch='' 753 | installvendorbin='' 754 | installvendorhtml1dir='' 755 | installvendorhtml3dir='' 756 | installvendorlib='' 757 | installvendorman1dir='' 758 | installvendorman3dir='' 759 | installvendorscript='' 760 | intsize='4' 761 | issymlink='test -h' 762 | ivdformat='"ld"' 763 | ivsize='4' 764 | ivtype='long' 765 | known_extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IO/Compress IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap attrs mro re threads threads/shared' 766 | ksh='' 767 | ld='ld' 768 | lddlflags='' 769 | ldflags=' -L/usr/local/lib' 770 | ldflags_uselargefiles='' 771 | ldlibpthname='LD_LIBRARY_PATH' 772 | less='less' 773 | lib_ext='.a' 774 | libc='/lib/libc-2.11.1.so' 775 | libperl='libperl.a' 776 | libpth='/usr/local/lib /lib /usr/lib' 777 | libs='-lnsl -ldl -lm -lcrypt -lutil -lc' 778 | libsdirs=' /usr/lib' 779 | libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libc.so' 780 | libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so' 781 | libspath=' /usr/local/lib /lib /usr/lib' 782 | libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD gdbm_compat' 783 | libswanted_uselargefiles='' 784 | line='' 785 | lint='' 786 | lkflags='' 787 | ln='ln' 788 | lns='/bin/ln -s' 789 | localtime_r_proto='0' 790 | locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' 791 | loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' 792 | longdblsize='12' 793 | longlongsize='8' 794 | longsize='4' 795 | lp='' 796 | lpr='' 797 | ls='ls' 798 | lseeksize='8' 799 | lseektype='off_t' 800 | mad='undef' 801 | madlyh='' 802 | madlyobj='' 803 | madlysrc='' 804 | mail='' 805 | mailx='' 806 | make='make' 807 | make_set_make='#' 808 | mallocobj='' 809 | mallocsrc='' 810 | malloctype='void *' 811 | man1dir=' ' 812 | man1direxp='' 813 | man1ext='0' 814 | man3dir=' ' 815 | man3direxp='' 816 | man3ext='0' 817 | mips_type='' 818 | mistrustnm='' 819 | mkdir='mkdir' 820 | mmaptype='void *' 821 | modetype='mode_t' 822 | more='more' 823 | multiarch='undef' 824 | mv='' 825 | myarchname='i686-linux' 826 | mydomain='.(none)' 827 | myhostname='pts-test1' 828 | myuname='linux pts-test1 4.18.10-1rodete2-amd64 #1 smp debian 4.18.10-1rodete2 (2018-10-09) i686 gnulinux ' 829 | n='-n' 830 | need_va_copy='undef' 831 | netdb_hlen_type='size_t' 832 | netdb_host_type='const void *' 833 | netdb_name_type='const char *' 834 | netdb_net_type='in_addr_t' 835 | nm='nm' 836 | nm_opt='' 837 | nm_so_opt='--dynamic' 838 | nonxs_ext='Attribute/Handlers Errno Module/Pluggable Safe Test/Harness' 839 | nroff='nroff' 840 | nvEUformat='"E"' 841 | nvFUformat='"F"' 842 | nvGUformat='"G"' 843 | nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0' 844 | nv_preserves_uv_bits='32' 845 | nveformat='"e"' 846 | nvfformat='"f"' 847 | nvgformat='"g"' 848 | nvsize='8' 849 | nvtype='double' 850 | o_nonblock='O_NONBLOCK' 851 | obj_ext='.o' 852 | old_pthread_create_joinable='' 853 | optimize='-O2' 854 | orderlib='false' 855 | osname='linux' 856 | osvers='4.18.10-1rodete2-amd64' 857 | otherlibdirs=' ' 858 | package='perl5' 859 | pager='/usr/bin/less' 860 | passcat='cat /etc/passwd' 861 | patchlevel='10' 862 | path_sep=':' 863 | perl5='/usr/bin/perl' 864 | perl='' 865 | perl_patchlevel='' 866 | perladmin='pts@pts-test1.(none)' 867 | perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc' 868 | perlpath='/usr/local/bin/perl' 869 | pg='pg' 870 | phostname='hostname' 871 | pidtype='pid_t' 872 | plibpth='' 873 | pmake='' 874 | pr='' 875 | prefix='/usr/local' 876 | prefixexp='/usr/local' 877 | privlib='/usr/local/lib/perl5/5.10.1' 878 | privlibexp='/usr/local/lib/perl5/5.10.1' 879 | procselfexe='"/proc/self/exe"' 880 | prototype='define' 881 | ptrsize='4' 882 | quadkind='3' 883 | quadtype='long long' 884 | randbits='48' 885 | randfunc='drand48' 886 | random_r_proto='0' 887 | randseedtype='long' 888 | ranlib=':' 889 | rd_nodata='-1' 890 | readdir64_r_proto='0' 891 | readdir_r_proto='0' 892 | revision='5' 893 | rm='rm' 894 | rm_try='/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*' 895 | rmail='' 896 | run='' 897 | runnm='false' 898 | sGMTIME_max='2147483647' 899 | sGMTIME_min='-2147483648' 900 | sLOCALTIME_max='2147483647' 901 | sLOCALTIME_min='-2147483648' 902 | sPRIEUldbl='"LE"' 903 | sPRIFUldbl='"LF"' 904 | sPRIGUldbl='"LG"' 905 | sPRIXU64='"LX"' 906 | sPRId64='"Ld"' 907 | sPRIeldbl='"Le"' 908 | sPRIfldbl='"Lf"' 909 | sPRIgldbl='"Lg"' 910 | sPRIi64='"Li"' 911 | sPRIo64='"Lo"' 912 | sPRIu64='"Lu"' 913 | sPRIx64='"Lx"' 914 | sSCNfldbl='"Lf"' 915 | sched_yield='sched_yield()' 916 | scriptdir='/usr/local/bin' 917 | scriptdirexp='/usr/local/bin' 918 | sed='sed' 919 | seedfunc='srand48' 920 | selectminbits='32' 921 | selecttype='fd_set *' 922 | sendmail='' 923 | setgrent_r_proto='0' 924 | sethostent_r_proto='0' 925 | setlocale_r_proto='0' 926 | setnetent_r_proto='0' 927 | setprotoent_r_proto='0' 928 | setpwent_r_proto='0' 929 | setservent_r_proto='0' 930 | sh='/bin/sh' 931 | shar='' 932 | sharpbang='#!' 933 | shmattype='void *' 934 | shortsize='2' 935 | shrpenv='' 936 | shsharp='true' 937 | sig_count='65' 938 | sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED ' 939 | sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' 940 | sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 ' 941 | sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' 942 | sig_size='69' 943 | signal_t='void' 944 | sitearch='/usr/local/lib/perl5/site_perl/5.10.1/i686-linux' 945 | sitearchexp='/usr/local/lib/perl5/site_perl/5.10.1/i686-linux' 946 | sitebin='/usr/local/bin' 947 | sitebinexp='/usr/local/bin' 948 | sitehtml1dir='' 949 | sitehtml1direxp='' 950 | sitehtml3dir='' 951 | sitehtml3direxp='' 952 | sitelib='/usr/local/lib/perl5/site_perl/5.10.1' 953 | sitelib_stem='/usr/local/lib/perl5/site_perl' 954 | sitelibexp='/usr/local/lib/perl5/site_perl/5.10.1' 955 | siteman1dir='' 956 | siteman1direxp='' 957 | siteman3dir='' 958 | siteman3direxp='' 959 | siteprefix='/usr/local' 960 | siteprefixexp='/usr/local' 961 | sitescript='/usr/local/bin' 962 | sitescriptexp='/usr/local/bin' 963 | sizesize='4' 964 | sizetype='size_t' 965 | sleep='' 966 | smail='' 967 | so='so' 968 | sockethdr='' 969 | socketlib='' 970 | socksizetype='socklen_t' 971 | sort='sort' 972 | spackage='Perl5' 973 | spitshell='cat' 974 | srand48_r_proto='0' 975 | srandom_r_proto='0' 976 | src='.' 977 | ssizetype='ssize_t' 978 | startperl='#!/usr/local/bin/perl' 979 | startsh='#!/bin/sh' 980 | static_ext='Cwd File/Glob' 981 | stdchar='char' 982 | stdio_base='((fp)->_IO_read_base)' 983 | stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' 984 | stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' 985 | stdio_filbuf='' 986 | stdio_ptr='((fp)->_IO_read_ptr)' 987 | stdio_stream_array='' 988 | strerror_r_proto='0' 989 | strings='/usr/include/string.h' 990 | submit='' 991 | subversion='1' 992 | sysman='/usr/share/man/man1' 993 | tail='' 994 | tar='' 995 | targetarch='' 996 | tbl='' 997 | tee='' 998 | test='test' 999 | timeincl='/usr/include/sys/time.h /usr/include/time.h ' 1000 | timetype='time_t' 1001 | tmpnam_r_proto='0' 1002 | to=':' 1003 | touch='touch' 1004 | tr='tr' 1005 | trnl='\n' 1006 | troff='' 1007 | ttyname_r_proto='0' 1008 | u16size='2' 1009 | u16type='unsigned short' 1010 | u32size='4' 1011 | u32type='unsigned long' 1012 | u64size='8' 1013 | u64type='unsigned long long' 1014 | u8size='1' 1015 | u8type='unsigned char' 1016 | uidformat='"lu"' 1017 | uidsign='1' 1018 | uidsize='4' 1019 | uidtype='uid_t' 1020 | uname='uname' 1021 | uniq='uniq' 1022 | uquadtype='unsigned long long' 1023 | use5005threads='undef' 1024 | use64bitall='undef' 1025 | use64bitint='undef' 1026 | usecrosscompile='undef' 1027 | usedevel='undef' 1028 | usedl='undef' 1029 | usedtrace='undef' 1030 | usefaststdio='undef' 1031 | useithreads='undef' 1032 | uselargefiles='define' 1033 | uselongdouble='undef' 1034 | usemallocwrap='define' 1035 | usemorebits='undef' 1036 | usemultiplicity='undef' 1037 | usemymalloc='n' 1038 | usenm='false' 1039 | useopcode='true' 1040 | useperlio='define' 1041 | useposix='true' 1042 | usereentrant='undef' 1043 | userelocatableinc='undef' 1044 | usesfio='false' 1045 | useshrplib='false' 1046 | usesitecustomize='undef' 1047 | usesocks='undef' 1048 | usethreads='undef' 1049 | usevendorprefix='undef' 1050 | usevfork='false' 1051 | usrinc='/usr/include' 1052 | uuname='' 1053 | uvXUformat='"lX"' 1054 | uvoformat='"lo"' 1055 | uvsize='4' 1056 | uvtype='unsigned long' 1057 | uvuformat='"lu"' 1058 | uvxformat='"lx"' 1059 | vendorarch='' 1060 | vendorarchexp='' 1061 | vendorbin='' 1062 | vendorbinexp='' 1063 | vendorhtml1dir=' ' 1064 | vendorhtml1direxp='' 1065 | vendorhtml3dir=' ' 1066 | vendorhtml3direxp='' 1067 | vendorlib='' 1068 | vendorlib_stem='' 1069 | vendorlibexp='' 1070 | vendorman1dir=' ' 1071 | vendorman1direxp='' 1072 | vendorman3dir=' ' 1073 | vendorman3direxp='' 1074 | vendorprefix='' 1075 | vendorprefixexp='' 1076 | vendorscript='' 1077 | vendorscriptexp='' 1078 | version='5.10.1' 1079 | version_patchlevel_string='version 10 subversion 1' 1080 | versiononly='undef' 1081 | vi='' 1082 | voidflags='15' 1083 | xlibpth='/usr/lib/386 /lib/386' 1084 | yacc='yacc' 1085 | yaccflags='' 1086 | zcat='' 1087 | zip='zip' 1088 | PERL_REVISION=5 1089 | PERL_VERSION=10 1090 | PERL_SUBVERSION=1 1091 | PERL_API_REVISION=5 1092 | PERL_API_VERSION=10 1093 | PERL_API_SUBVERSION=0 1094 | PERL_PATCHLEVEL='' 1095 | PERL_CONFIG_SH=true 1096 | : Variables propagated from previous config.sh file. 1097 | libdb_needs_pthread='N' 1098 | -------------------------------------------------------------------------------- /preamble-5.10.1.pm: -------------------------------------------------------------------------------- 1 | # The contents of this file will be embedded into the staticperl executable 2 | # and executed at startup as Perl code. 3 | # 4 | # Currently this file contains some mini package definitions: only a subset 5 | # of the Perl 5.10.1 packages, only Linux is supported, POD documentation 6 | # removed, comments removed, some features removed. 7 | # 8 | # Comments in the beginning of the line will be removed before embedding. 9 | # 10 | # This preamble works for both perl and miniperl (without C extensions). 11 | # 12 | # TODO(pts): Add support for these modules in /usr/lib/perl/5.10.1 13 | # -rw-r--r-- 1 root root 997 Apr 23 2010 /usr/lib/perl/5.10.1/ops.pm 14 | # -rw-r--r-- 1 root root 2765 Apr 23 2010 /usr/lib/perl/5.10.1/Config.pm 15 | # -rw-r--r-- 1 root root 3131 Apr 23 2010 /usr/lib/perl/5.10.1/lib.pm 16 | # -rw-r--r-- 1 root root 3468 Apr 23 2010 /usr/lib/perl/5.10.1/XSLoader.pm 17 | # -rw-r--r-- 1 root root 3557 Apr 23 2010 /usr/lib/perl/5.10.1/Fcntl.pm 18 | # -rw-r--r-- 1 root root 15490 Apr 23 2010 /usr/lib/perl/5.10.1/Opcode.pm 19 | # -rw-r--r-- 1 root root 19892 Apr 23 2010 /usr/lib/perl/5.10.1/encoding.pm 20 | # -rw-r--r-- 1 root root 29731 Apr 23 2010 /usr/lib/perl/5.10.1/Encode.pm 21 | # 22 | package Exporter; BEGIN { $INC{"Exporter.pm"} = "Exporter.pm" } 23 | BEGIN { 24 | our $Debug = 0; 25 | our $ExportLevel = 0; 26 | our $Verbose ||= 0; 27 | our $VERSION = '5.63'; 28 | our (%Cache); 29 | $Carp::Internal{Exporter}++; 30 | sub as_heavy { 31 | require Exporter::Heavy; 32 | my $c = (caller(1))[3]; 33 | $c =~ s/.*:://; 34 | \&{"Exporter::Heavy::heavy_$c"}; 35 | } 36 | sub export { 37 | goto &{as_heavy()}; 38 | } 39 | sub import { 40 | my $pkg = shift; 41 | my $callpkg = caller($ExportLevel); 42 | if ($pkg eq "Exporter" and @_ and $_[0] eq "import") { 43 | *{$callpkg."::import"} = \&import; 44 | return; 45 | } 46 | my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"}); 47 | return export $pkg, $callpkg, @_ 48 | if $Verbose or $Debug or @$fail > 1; 49 | my $export_cache = ($Cache{$pkg} ||= {}); 50 | my $args = @_ or @_ = @$exports; 51 | local $_; 52 | if ($args and not %$export_cache) { 53 | s/^&//, $export_cache->{$_} = 1 54 | foreach (@$exports, @{"$pkg\::EXPORT_OK"}); 55 | } 56 | my $heavy; 57 | if ($args or $fail) { 58 | ($heavy = (/\W/ or $args and not exists $export_cache->{$_} 59 | or @$fail and $_ eq $fail->[0])) and last 60 | foreach (@_); 61 | } else { 62 | ($heavy = /\W/) and last 63 | foreach (@_); 64 | } 65 | return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy; 66 | local $SIG{__WARN__} = sub {require Carp; &Carp::carp}; 67 | *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_; 68 | } 69 | sub export_fail { 70 | my $self = shift; 71 | @_; 72 | } 73 | sub export_to_level { 74 | goto &{as_heavy()}; 75 | } 76 | sub export_tags { 77 | goto &{as_heavy()}; 78 | } 79 | sub export_ok_tags { 80 | goto &{as_heavy()}; 81 | } 82 | sub require_version { 83 | goto &{as_heavy()}; 84 | } 85 | } 86 | package Carp; BEGIN { $INC{"Carp.pm"} = "Carp.pm" } 87 | BEGIN { 88 | our $VERSION = '1.11'; 89 | our $MaxEvalLen = 0; 90 | our $Verbose = 0; 91 | our $CarpLevel = 0; 92 | our $MaxArgLen = 64; 93 | our $MaxArgNums = 8; 94 | our @ISA = ('Exporter'); 95 | our @EXPORT = qw(confess croak carp); 96 | our @EXPORT_OK = qw(cluck verbose longmess shortmess); 97 | our @EXPORT_FAIL = qw(verbose); 98 | sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ } 99 | sub longmess { goto &longmess_jmp } 100 | sub shortmess { goto &shortmess_jmp } 101 | sub shortmess_jmp { goto &longmess_jmp; } 102 | # Simplified implementation (simpler than Carp::Heavy), no stack trace. 103 | sub longmess_jmp { my $S="@_"; my @C=caller(1); $S .= " at $C[1] line $C[2]\n" if substr($S, -1) ne "\n"; $S } 104 | sub croak { die shortmess @_ } 105 | sub confess { die longmess @_ } 106 | sub carp { warn shortmess @_ } 107 | sub cluck { warn longmess @_ } 108 | } 109 | package strict; BEGIN { $INC{"strict.pm"} = "strict.pm" } 110 | BEGIN { 111 | $strict::VERSION = "1.04"; 112 | %strict::bitmask = ( 113 | refs => 0x00000002, 114 | subs => 0x00000200, 115 | vars => 0x00000400 116 | ); 117 | sub bits { 118 | my $bits = 0; 119 | my @wrong; 120 | foreach my $s (@_) { 121 | push @wrong, $s unless exists $strict::bitmask{$s}; 122 | $bits |= $strict::bitmask{$s} || 0; 123 | } 124 | if (@wrong) { 125 | Carp::croak("Unknown 'strict' tag(s) '@wrong'"); 126 | } 127 | $bits; 128 | } 129 | my $default_bits = bits(qw(refs subs vars)); 130 | sub import { 131 | shift; 132 | $^H |= @_ ? bits(@_) : $default_bits; 133 | } 134 | sub unimport { 135 | shift; 136 | $^H &= ~ (@_ ? bits(@_) : $default_bits); 137 | } 138 | } 139 | # Errno is Linux-specific (2.6.x). 140 | package Errno; BEGIN { $INC{"Errno.pm"} = "Errno.pm" } 141 | BEGIN { 142 | our (@EXPORT_OK,%EXPORT_TAGS,@ISA,$VERSION,%errno,$AUTOLOAD); 143 | use Exporter (); 144 | use strict; 145 | $VERSION = "1.11"; 146 | $VERSION = eval $VERSION; 147 | @ISA = qw(Exporter); 148 | @EXPORT_OK = qw(EBADR ENOMSG ENOTSUP ESTRPIPE EADDRINUSE EL3HLT EBADF 149 | ENOTBLK ENAVAIL ECHRNG ENOTNAM ELNRNG ENOKEY EXDEV EBADE EBADSLT 150 | ECONNREFUSED ENOSTR ENONET EOVERFLOW EISCONN EFBIG EKEYREVOKED 151 | ECONNRESET EWOULDBLOCK ELIBMAX EREMOTEIO ERFKILL ENOPKG ELIBSCN 152 | EDESTADDRREQ ENOTSOCK EIO EMEDIUMTYPE EINPROGRESS ERANGE EAFNOSUPPORT 153 | EADDRNOTAVAIL EINTR EREMOTE EILSEQ ENOMEM EPIPE ENETUNREACH ENODATA 154 | EUSERS EOPNOTSUPP EPROTO EISNAM ESPIPE EALREADY ENAMETOOLONG ENOEXEC 155 | EISDIR EBADRQC EEXIST EDOTDOT ELIBBAD EOWNERDEAD ESRCH EFAULT EXFULL 156 | EDEADLOCK EAGAIN ENOPROTOOPT ENETDOWN EPROTOTYPE EL2NSYNC ENETRESET 157 | EUCLEAN EADV EROFS ESHUTDOWN EMULTIHOP EPROTONOSUPPORT ENFILE ENOLCK 158 | ECONNABORTED ECANCELED EDEADLK ESRMNT ENOLINK ETIME ENOTDIR EINVAL 159 | ENOTTY ENOANO ELOOP ENOENT EPFNOSUPPORT EBADMSG ENOMEDIUM EL2HLT EDOM 160 | EBFONT EKEYEXPIRED EMSGSIZE ENOCSI EL3RST ENOSPC EIDRM ENOBUFS ENOSYS 161 | EHOSTDOWN EBADFD ENOSR ENOTCONN ESTALE EDQUOT EKEYREJECTED EMFILE 162 | ENOTRECOVERABLE EACCES EBUSY E2BIG EPERM ELIBEXEC ETOOMANYREFS ELIBACC 163 | ENOTUNIQ ECOMM ERESTART ESOCKTNOSUPPORT EUNATCH ETIMEDOUT ENXIO ENODEV 164 | ETXTBSY EMLINK ECHILD EHOSTUNREACH EREMCHG ENOTEMPTY); 165 | %EXPORT_TAGS = ( 166 | POSIX => [qw( 167 | E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY 168 | EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK 169 | EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH 170 | EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK 171 | EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS 172 | ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK 173 | ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM 174 | EPFNOSUPPORT EPIPE EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART 175 | EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT 176 | ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV 177 | )] 178 | ); 179 | sub EPERM () { 1 } 180 | sub ENOENT () { 2 } 181 | sub ESRCH () { 3 } 182 | sub EINTR () { 4 } 183 | sub EIO () { 5 } 184 | sub ENXIO () { 6 } 185 | sub E2BIG () { 7 } 186 | sub ENOEXEC () { 8 } 187 | sub EBADF () { 9 } 188 | sub ECHILD () { 10 } 189 | sub EWOULDBLOCK () { 11 } 190 | sub EAGAIN () { 11 } 191 | sub ENOMEM () { 12 } 192 | sub EACCES () { 13 } 193 | sub EFAULT () { 14 } 194 | sub ENOTBLK () { 15 } 195 | sub EBUSY () { 16 } 196 | sub EEXIST () { 17 } 197 | sub EXDEV () { 18 } 198 | sub ENODEV () { 19 } 199 | sub ENOTDIR () { 20 } 200 | sub EISDIR () { 21 } 201 | sub EINVAL () { 22 } 202 | sub ENFILE () { 23 } 203 | sub EMFILE () { 24 } 204 | sub ENOTTY () { 25 } 205 | sub ETXTBSY () { 26 } 206 | sub EFBIG () { 27 } 207 | sub ENOSPC () { 28 } 208 | sub ESPIPE () { 29 } 209 | sub EROFS () { 30 } 210 | sub EMLINK () { 31 } 211 | sub EPIPE () { 32 } 212 | sub EDOM () { 33 } 213 | sub ERANGE () { 34 } 214 | sub EDEADLOCK () { 35 } 215 | sub EDEADLK () { 35 } 216 | sub ENAMETOOLONG () { 36 } 217 | sub ENOLCK () { 37 } 218 | sub ENOSYS () { 38 } 219 | sub ENOTEMPTY () { 39 } 220 | sub ELOOP () { 40 } 221 | sub ENOMSG () { 42 } 222 | sub EIDRM () { 43 } 223 | sub ECHRNG () { 44 } 224 | sub EL2NSYNC () { 45 } 225 | sub EL3HLT () { 46 } 226 | sub EL3RST () { 47 } 227 | sub ELNRNG () { 48 } 228 | sub EUNATCH () { 49 } 229 | sub ENOCSI () { 50 } 230 | sub EL2HLT () { 51 } 231 | sub EBADE () { 52 } 232 | sub EBADR () { 53 } 233 | sub EXFULL () { 54 } 234 | sub ENOANO () { 55 } 235 | sub EBADRQC () { 56 } 236 | sub EBADSLT () { 57 } 237 | sub EBFONT () { 59 } 238 | sub ENOSTR () { 60 } 239 | sub ENODATA () { 61 } 240 | sub ETIME () { 62 } 241 | sub ENOSR () { 63 } 242 | sub ENONET () { 64 } 243 | sub ENOPKG () { 65 } 244 | sub EREMOTE () { 66 } 245 | sub ENOLINK () { 67 } 246 | sub EADV () { 68 } 247 | sub ESRMNT () { 69 } 248 | sub ECOMM () { 70 } 249 | sub EPROTO () { 71 } 250 | sub EMULTIHOP () { 72 } 251 | sub EDOTDOT () { 73 } 252 | sub EBADMSG () { 74 } 253 | sub EOVERFLOW () { 75 } 254 | sub ENOTUNIQ () { 76 } 255 | sub EBADFD () { 77 } 256 | sub EREMCHG () { 78 } 257 | sub ELIBACC () { 79 } 258 | sub ELIBBAD () { 80 } 259 | sub ELIBSCN () { 81 } 260 | sub ELIBMAX () { 82 } 261 | sub ELIBEXEC () { 83 } 262 | sub EILSEQ () { 84 } 263 | sub ERESTART () { 85 } 264 | sub ESTRPIPE () { 86 } 265 | sub EUSERS () { 87 } 266 | sub ENOTSOCK () { 88 } 267 | sub EDESTADDRREQ () { 89 } 268 | sub EMSGSIZE () { 90 } 269 | sub EPROTOTYPE () { 91 } 270 | sub ENOPROTOOPT () { 92 } 271 | sub EPROTONOSUPPORT () { 93 } 272 | sub ESOCKTNOSUPPORT () { 94 } 273 | sub ENOTSUP () { 95 } 274 | sub EOPNOTSUPP () { 95 } 275 | sub EPFNOSUPPORT () { 96 } 276 | sub EAFNOSUPPORT () { 97 } 277 | sub EADDRINUSE () { 98 } 278 | sub EADDRNOTAVAIL () { 99 } 279 | sub ENETDOWN () { 100 } 280 | sub ENETUNREACH () { 101 } 281 | sub ENETRESET () { 102 } 282 | sub ECONNABORTED () { 103 } 283 | sub ECONNRESET () { 104 } 284 | sub ENOBUFS () { 105 } 285 | sub EISCONN () { 106 } 286 | sub ENOTCONN () { 107 } 287 | sub ESHUTDOWN () { 108 } 288 | sub ETOOMANYREFS () { 109 } 289 | sub ETIMEDOUT () { 110 } 290 | sub ECONNREFUSED () { 111 } 291 | sub EHOSTDOWN () { 112 } 292 | sub EHOSTUNREACH () { 113 } 293 | sub EALREADY () { 114 } 294 | sub EINPROGRESS () { 115 } 295 | sub ESTALE () { 116 } 296 | sub EUCLEAN () { 117 } 297 | sub ENOTNAM () { 118 } 298 | sub ENAVAIL () { 119 } 299 | sub EISNAM () { 120 } 300 | sub EREMOTEIO () { 121 } 301 | sub EDQUOT () { 122 } 302 | sub ENOMEDIUM () { 123 } 303 | sub EMEDIUMTYPE () { 124 } 304 | sub ECANCELED () { 125 } 305 | sub ENOKEY () { 126 } 306 | sub EKEYEXPIRED () { 127 } 307 | sub EKEYREVOKED () { 128 } 308 | sub EKEYREJECTED () { 129 } 309 | sub EOWNERDEAD () { 130 } 310 | sub ENOTRECOVERABLE () { 131 } 311 | sub ERFKILL () { 132 } 312 | sub TIEHASH { bless [] } 313 | sub FETCH { 314 | my ($self, $errname) = @_; 315 | my $proto = prototype("Errno::$errname"); 316 | my $errno = ""; 317 | if (defined($proto) && $proto eq "") { 318 | no strict 'refs'; 319 | $errno = &$errname; 320 | $errno = 0 unless $! == $errno; 321 | } 322 | return $errno; 323 | } 324 | sub STORE { 325 | require Carp; 326 | Carp::confess("ERRNO hash is read only!"); 327 | } 328 | *CLEAR = \&STORE; 329 | *DELETE = \&STORE; 330 | sub NEXTKEY { 331 | my($k,$v); 332 | while(($k,$v) = each %Errno::) { 333 | my $proto = prototype("Errno::$k"); 334 | last if (defined($proto) && $proto eq ""); 335 | } 336 | $k 337 | } 338 | sub FIRSTKEY { 339 | my $s = scalar keys %Errno::; 340 | goto &NEXTKEY; 341 | } 342 | sub EXISTS { 343 | my ($self, $errname) = @_; 344 | my $r = ref $errname; 345 | my $proto = !$r || $r eq 'CODE' ? prototype($errname) : undef; 346 | defined($proto) && $proto eq ""; 347 | } 348 | tie %!, __PACKAGE__; 349 | } 350 | package base; BEGIN { $INC{"base.pm"} = "base.pm" } 351 | BEGIN{ 352 | use strict 'vars'; 353 | $base::VERSION = 2.14; 354 | sub SUCCESS () { 1 } 355 | sub PUBLIC () { 2**0 } 356 | sub PRIVATE () { 2**1 } 357 | sub INHERITED () { 2**2 } 358 | sub PROTECTED () { 2**3 } 359 | my $Fattr = \%fields::attr; 360 | sub has_fields { 361 | my($base) = shift; 362 | my $fglob = ${"$base\::"}{FIELDS}; 363 | return( ($fglob && 'GLOB' eq ref($fglob) && *$fglob{HASH}) ? 1 : 0 ); 364 | } 365 | sub has_version { 366 | my($base) = shift; 367 | my $vglob = ${$base.'::'}{VERSION}; 368 | return( ($vglob && *$vglob{SCALAR}) ? 1 : 0 ); 369 | } 370 | sub has_attr { 371 | my($proto) = shift; 372 | my($class) = ref $proto || $proto; 373 | return exists $Fattr->{$class}; 374 | } 375 | sub get_attr { 376 | $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]}; 377 | return $Fattr->{$_[0]}; 378 | } 379 | if ($] < 5.009) { 380 | *get_fields = sub { 381 | () = \%{$_[0].'::FIELDS'}; 382 | my $f = \%{$_[0].'::FIELDS'}; 383 | bless $f, 'pseudohash' if (ref($f) ne 'pseudohash'); 384 | return $f; 385 | } 386 | } 387 | else { 388 | *get_fields = sub { 389 | () = \%{$_[0].'::FIELDS'}; 390 | return \%{$_[0].'::FIELDS'}; 391 | } 392 | } 393 | sub import { 394 | my $class = shift; 395 | return SUCCESS unless @_; 396 | my $fields_base; 397 | my $inheritor = caller(0); 398 | my @isa_classes; 399 | my @bases; 400 | foreach my $base (@_) { 401 | if ( $inheritor eq $base ) { 402 | warn "Class '$inheritor' tried to inherit from itself\n"; 403 | } 404 | next if grep $_->isa($base), ($inheritor, @bases); 405 | if (has_version($base)) { 406 | ${$base.'::VERSION'} = '-1, set by base.pm' 407 | unless defined ${$base.'::VERSION'}; 408 | } else { 409 | my $sigdie; 410 | { 411 | local $SIG{__DIE__}; 412 | eval "require $base"; 413 | die if $@ && $@ !~ /^Can't locate .*? at \(eval /; 414 | unless (%{"$base\::"}) { 415 | local $" = " "; 416 | Carp::croak("Base class package \"$base\" is empty.\n (Perhaps you need to 'use' the module which defines that package first,\n or make that module available in \@INC (\@INC contains: @INC).\n"); 417 | } 418 | $sigdie = $SIG{__DIE__} || undef; 419 | } 420 | $SIG{__DIE__} = $sigdie if defined $sigdie; 421 | ${$base.'::VERSION'} = "-1, set by base.pm" 422 | unless defined ${$base.'::VERSION'}; 423 | } 424 | push @bases, $base; 425 | if ( has_fields($base) || has_attr($base) ) { 426 | if ($fields_base) { 427 | Carp::croak("Can't multiply inherit fields"); 428 | } else { 429 | $fields_base = $base; 430 | } 431 | } 432 | } 433 | push @{"$inheritor\::ISA"}, @isa_classes; 434 | push @{"$inheritor\::ISA"}, @bases; 435 | if( defined $fields_base ) { 436 | inherit_fields($inheritor, $fields_base); 437 | } 438 | } 439 | sub inherit_fields { 440 | my($derived, $base) = @_; 441 | return SUCCESS unless $base; 442 | my $battr = get_attr($base); 443 | my $dattr = get_attr($derived); 444 | my $dfields = get_fields($derived); 445 | my $bfields = get_fields($base); 446 | $dattr->[0] = @$battr; 447 | if( keys %$dfields ) { 448 | warn "$derived is inheriting from $base but already has its own fields!\nThis will cause problems. Be sure you use base BEFORE declaring fields.\n"; 449 | } 450 | while (my($k,$v) = each %$bfields) { 451 | my $fno; 452 | if ($fno = $dfields->{$k} and $fno != $v) { 453 | Carp::croak ("Inherited fields can't override existing fields"); 454 | } 455 | if( $battr->[$v] & PRIVATE ) { 456 | $dattr->[$v] = PRIVATE | INHERITED; 457 | } else { 458 | $dattr->[$v] = INHERITED | $battr->[$v]; 459 | $dfields->{$k} = $v; 460 | } 461 | } 462 | foreach my $idx (1..$#{$battr}) { 463 | next if defined $dattr->[$idx]; 464 | $dattr->[$idx] = $battr->[$idx] & INHERITED; 465 | } 466 | } 467 | } 468 | package warnings; BEGIN { $INC{"warnings.pm"} = "warnings.pm" } 469 | BEGIN { 470 | $warnings::VERSION = '1.06'; 471 | %warnings::Offsets = ( 472 | 'all' => 0, 473 | 'closure' => 2, 474 | 'deprecated' => 4, 475 | 'exiting' => 6, 476 | 'glob' => 8, 477 | 'io' => 10, 478 | 'closed' => 12, 479 | 'exec' => 14, 480 | 'layer' => 16, 481 | 'newline' => 18, 482 | 'pipe' => 20, 483 | 'unopened' => 22, 484 | 'misc' => 24, 485 | 'numeric' => 26, 486 | 'once' => 28, 487 | 'overflow' => 30, 488 | 'pack' => 32, 489 | 'portable' => 34, 490 | 'recursion' => 36, 491 | 'redefine' => 38, 492 | 'regexp' => 40, 493 | 'severe' => 42, 494 | 'debugging' => 44, 495 | 'inplace' => 46, 496 | 'internal' => 48, 497 | 'malloc' => 50, 498 | 'signal' => 52, 499 | 'substr' => 54, 500 | 'syntax' => 56, 501 | 'ambiguous' => 58, 502 | 'bareword' => 60, 503 | 'digit' => 62, 504 | 'parenthesis' => 64, 505 | 'precedence' => 66, 506 | 'printf' => 68, 507 | 'prototype' => 70, 508 | 'qw' => 72, 509 | 'reserved' => 74, 510 | 'semicolon' => 76, 511 | 'taint' => 78, 512 | 'threads' => 80, 513 | 'uninitialized' => 82, 514 | 'unpack' => 84, 515 | 'untie' => 86, 516 | 'utf8' => 88, 517 | 'void' => 90, 518 | ); 519 | %warnings::Bits = ( 520 | 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05", 521 | 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", 522 | 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", 523 | 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 524 | 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 525 | 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", 526 | 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 527 | 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", 528 | 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 529 | 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 530 | 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 531 | 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", 532 | 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", 533 | 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", 534 | 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", 535 | 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", 536 | 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", 537 | 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", 538 | 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", 539 | 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", 540 | 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", 541 | 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", 542 | 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", 543 | 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", 544 | 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", 545 | 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", 546 | 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", 547 | 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", 548 | 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", 549 | 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", 550 | 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", 551 | 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", 552 | 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", 553 | 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", 554 | 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", 555 | 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", 556 | 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", 557 | 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", 558 | 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", 559 | 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", 560 | 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", 561 | 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", 562 | 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", 563 | 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", 564 | 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 565 | 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", 566 | ); 567 | %warnings::DeadBits = ( 568 | 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x0a", 569 | 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", 570 | 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", 571 | 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 572 | 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 573 | 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", 574 | 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 575 | 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", 576 | 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 577 | 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 578 | 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 579 | 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", 580 | 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", 581 | 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", 582 | 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", 583 | 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", 584 | 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", 585 | 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", 586 | 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", 587 | 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", 588 | 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", 589 | 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", 590 | 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", 591 | 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", 592 | 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", 593 | 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", 594 | 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", 595 | 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", 596 | 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", 597 | 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", 598 | 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", 599 | 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", 600 | 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", 601 | 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", 602 | 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", 603 | 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", 604 | 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", 605 | 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", 606 | 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", 607 | 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", 608 | 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", 609 | 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", 610 | 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", 611 | 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", 612 | 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", 613 | 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", 614 | ); 615 | $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0"; 616 | $LAST_BIT = 92 ; 617 | $BYTES = 12 ; 618 | $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ; 619 | sub Croaker 620 | { 621 | Carp::croak(@_); 622 | } 623 | sub bits 624 | { 625 | push @_, 'all' unless @_; 626 | my $mask; 627 | my $catmask ; 628 | my $fatal = 0 ; 629 | my $no_fatal = 0 ; 630 | foreach my $word ( @_ ) { 631 | if ($word eq 'FATAL') { 632 | $fatal = 1; 633 | $no_fatal = 0; 634 | } elsif ($word eq 'NONFATAL') { 635 | $fatal = 0; 636 | $no_fatal = 1; 637 | } elsif ($catmask = $Bits{$word}) { 638 | $mask |= $catmask ; 639 | $mask |= $DeadBits{$word} if $fatal ; 640 | $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; 641 | } else 642 | { Croaker("Unknown warnings category '$word'")} 643 | } 644 | return $mask ; 645 | } 646 | sub import { 647 | shift; 648 | my $catmask ; 649 | my $fatal = 0 ; 650 | my $no_fatal = 0 ; 651 | my $mask = ${^WARNING_BITS} ; 652 | if (vec($mask, $Offsets{'all'}, 1)) { 653 | $mask |= $Bits{'all'} ; 654 | $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); 655 | } 656 | push @_, 'all' unless @_; 657 | foreach my $word ( @_ ) { 658 | if ($word eq 'FATAL') { 659 | $fatal = 1; 660 | $no_fatal = 0; 661 | } elsif ($word eq 'NONFATAL') { 662 | $fatal = 0; 663 | $no_fatal = 1; 664 | } elsif ($catmask = $Bits{$word}) { 665 | $mask |= $catmask ; 666 | $mask |= $DeadBits{$word} if $fatal ; 667 | $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; 668 | } else 669 | { Croaker("Unknown warnings category '$word'")} 670 | } 671 | ${^WARNING_BITS} = $mask ; 672 | } 673 | sub unimport { 674 | shift; 675 | my $catmask ; 676 | my $mask = ${^WARNING_BITS} ; 677 | if (vec($mask, $Offsets{'all'}, 1)) { 678 | $mask |= $Bits{'all'} ; 679 | $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); 680 | } 681 | push @_, 'all' unless @_; 682 | foreach my $word ( @_ ) { 683 | if ($word eq 'FATAL') { 684 | next; 685 | } elsif ($catmask = $Bits{$word}) { 686 | $mask &= ~($catmask | $DeadBits{$word} | $All); 687 | } else 688 | { Croaker("Unknown warnings category '$word'")} 689 | } 690 | ${^WARNING_BITS} = $mask ; 691 | } 692 | my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = (); 693 | sub __chk 694 | { 695 | my $category ; 696 | my $offset ; 697 | my $isobj = 0 ; 698 | if (@_) { 699 | $category = shift ; 700 | if (my $type = ref $category) { 701 | Croaker("not an object") 702 | if exists $builtin_type{$type}; 703 | $category = $type; 704 | $isobj = 1 ; 705 | } 706 | $offset = $Offsets{$category}; 707 | Croaker("Unknown warnings category '$category'") 708 | unless defined $offset; 709 | } else { 710 | $category = (caller(1))[0] ; 711 | $offset = $Offsets{$category}; 712 | Croaker("package '$category' not registered for warnings") 713 | unless defined $offset ; 714 | } 715 | my $this_pkg = (caller(1))[0] ; 716 | my $i = 2 ; 717 | my $pkg ; 718 | if ($isobj) { 719 | while (do { { package DB; $pkg = (caller($i++))[0] } } ) { 720 | last unless @DB::args && $DB::args[0] =~ /^$category=/ ; 721 | } 722 | $i -= 2 ; 723 | } else { 724 | $i = _error_loc(); 725 | } 726 | my $callers_bitmask = (caller($i))[9] ; 727 | return ($callers_bitmask, $offset, $i) ; 728 | } 729 | sub _error_loc { 730 | require Carp::Heavy; 731 | goto &Carp::short_error_loc; 732 | } 733 | sub enabled { 734 | Croaker("Usage: warnings::enabled([category])") 735 | unless @_ == 1 || @_ == 0 ; 736 | my ($callers_bitmask, $offset, $i) = __chk(@_) ; 737 | return 0 unless defined $callers_bitmask ; 738 | return vec($callers_bitmask, $offset, 1) || 739 | vec($callers_bitmask, $Offsets{'all'}, 1) ; 740 | } 741 | sub warn 742 | { 743 | Croaker("Usage: warnings::warn([category,] 'message')") 744 | unless @_ == 2 || @_ == 1 ; 745 | my $message = pop ; 746 | my ($callers_bitmask, $offset, $i) = __chk(@_) ; 747 | Carp::croak($message) 748 | if vec($callers_bitmask, $offset+1, 1) || 749 | vec($callers_bitmask, $Offsets{'all'}+1, 1) ; 750 | Carp::carp($message) ; 751 | } 752 | sub warnif 753 | { 754 | Croaker("Usage: warnings::warnif([category,] 'message')") 755 | unless @_ == 2 || @_ == 1 ; 756 | my $message = pop ; 757 | my ($callers_bitmask, $offset, $i) = __chk(@_) ; 758 | return 759 | unless defined $callers_bitmask && 760 | (vec($callers_bitmask, $offset, 1) || 761 | vec($callers_bitmask, $Offsets{'all'}, 1)) ; 762 | Carp::croak($message) 763 | if vec($callers_bitmask, $offset+1, 1) || 764 | vec($callers_bitmask, $Offsets{'all'}+1, 1) ; 765 | Carp::carp($message) ; 766 | } 767 | } 768 | package overload::numbers; BEGIN { $INC{"overload/numbers.pm"} = "overload/numbers.pm" } 769 | BEGIN { 770 | @overload::numbers::names = qw` 771 | () 772 | (${} 773 | (@{} 774 | (%{} 775 | (*{} 776 | (&{} 777 | (++ 778 | (-- 779 | (bool 780 | (0+ 781 | ("" 782 | (! 783 | (= 784 | (abs 785 | (neg 786 | (<> 787 | (int 788 | (< 789 | (<= 790 | (> 791 | (>= 792 | (== 793 | (!= 794 | (lt 795 | (le 796 | (gt 797 | (ge 798 | (eq 799 | (ne 800 | (nomethod 801 | (+ 802 | (+= 803 | (- 804 | (-= 805 | (* 806 | (*= 807 | (/ 808 | (/= 809 | (% 810 | (%= 811 | (** 812 | (**= 813 | (<< 814 | (<<= 815 | (>> 816 | (>>= 817 | (& 818 | (&= 819 | (| 820 | (|= 821 | (^ 822 | (^= 823 | (<=> 824 | (cmp 825 | (~ 826 | (atan2 827 | (cos 828 | (sin 829 | (exp 830 | (log 831 | (sqrt 832 | (x 833 | (x= 834 | (. 835 | (.= 836 | (~~ 837 | DESTROY 838 | `; 839 | @overload::numbers::enums = qw` 840 | fallback 841 | to_sv 842 | to_av 843 | to_hv 844 | to_gv 845 | to_cv 846 | inc 847 | dec 848 | bool_ 849 | numer 850 | string 851 | not 852 | copy 853 | abs 854 | neg 855 | iter 856 | int 857 | lt 858 | le 859 | gt 860 | ge 861 | eq 862 | ne 863 | slt 864 | sle 865 | sgt 866 | sge 867 | seq 868 | sne 869 | nomethod 870 | add 871 | add_ass 872 | subtr 873 | subtr_ass 874 | mult 875 | mult_ass 876 | div 877 | div_ass 878 | modulo 879 | modulo_ass 880 | pow 881 | pow_ass 882 | lshift 883 | lshift_ass 884 | rshift 885 | rshift_ass 886 | band 887 | band_ass 888 | bor 889 | bor_ass 890 | bxor 891 | bxor_ass 892 | ncmp 893 | scmp 894 | compl 895 | atan2 896 | cos 897 | sin 898 | exp 899 | log 900 | sqrt 901 | repeat 902 | repeat_ass 903 | concat 904 | concat_ass 905 | smart 906 | DESTROY 907 | `; 908 | { my $i = 0; %overload::numbers::names = map { $_ => $i++ } @names } 909 | { my $i = 0; %overload::numbers::enums = map { $_ => $i++ } @enums } 910 | } 911 | package locale; BEGIN { $INC{"locale.pm"} = "locale.pm" } 912 | BEGIN { 913 | $locale::VERSION = '1.00'; 914 | $locale::hint_bits = 0x4; 915 | sub import { 916 | $^H |= $locale::hint_bits; 917 | } 918 | sub unimport { 919 | $^H &= ~$locale::hint_bits; 920 | } 921 | } 922 | package integer; BEGIN { $INC{"integer.pm"} = "integer.pm" } 923 | BEGIN { 924 | $integer::VERSION = '1.00'; 925 | $integer::hint_bits = 0x1; 926 | sub import { 927 | $^H |= $integer::hint_bits; 928 | } 929 | sub unimport { 930 | $^H &= ~$integer::hint_bits; 931 | } 932 | } 933 | package Symbol; BEGIN { $INC{"Symbol.pm"} = "Symbol.pm" } 934 | BEGIN { 935 | @ISA = qw(Exporter); 936 | @EXPORT = qw(gensym ungensym qualify qualify_to_ref); 937 | @EXPORT_OK = qw(delete_package geniosym); 938 | $VERSION = '1.07'; 939 | my $genpkg = "Symbol::"; 940 | my $genseq = 0; 941 | my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT); 942 | sub gensym () { 943 | my $name = "GEN" . $genseq++; 944 | my $ref = \*{$genpkg . $name}; 945 | delete $$genpkg{$name}; 946 | $ref; 947 | } 948 | sub geniosym () { 949 | my $sym = gensym(); 950 | select(select $sym); 951 | *$sym{IO}; 952 | } 953 | sub ungensym ($) {} 954 | sub qualify ($;$) { 955 | my ($name) = @_; 956 | if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) { 957 | my $pkg; 958 | if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) { 959 | $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei; 960 | $pkg = "main"; 961 | } else { 962 | $pkg = (@_ > 1) ? $_[1] : caller; 963 | } 964 | $name = $pkg . "::" . $name; 965 | } 966 | $name; 967 | } 968 | sub qualify_to_ref ($;$) { 969 | return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller }; 970 | } 971 | sub delete_package ($) { 972 | my $pkg = shift; 973 | unless ($pkg =~ /^main::.*::$/) { 974 | $pkg = "main$pkg" if $pkg =~ /^::/; 975 | $pkg = "main::$pkg" unless $pkg =~ /^main::/; 976 | $pkg .= '::' unless $pkg =~ /::$/; 977 | } 978 | my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; 979 | my $stem_symtab = *{$stem}{HASH}; 980 | return unless defined $stem_symtab and exists $stem_symtab->{$leaf}; 981 | my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH}; 982 | foreach my $name (keys %$leaf_symtab) { 983 | undef *{$pkg . $name}; 984 | } 985 | %$leaf_symtab = (); 986 | delete $stem_symtab->{$leaf}; 987 | } 988 | } 989 | package SelectSaver; BEGIN { $INC{"SelectSaver.pm"} = "SelectSaver.pm" } 990 | BEGIN{ 991 | $SelectSaver::VERSION = '1.02'; 992 | sub new { 993 | @_ >= 1 && @_ <= 2 or Carp::croak('usage: SelectSaver->new( [FILEHANDLE] )'); 994 | my $fh = select; 995 | my $self = bless \$fh, $_[0]; 996 | select Symbol::qualify($_[1], caller) if @_ > 1; 997 | $self; 998 | } 999 | sub DESTROY { 1000 | my $self = $_[0]; 1001 | select $$self; 1002 | } 1003 | } 1004 | package utf8; BEGIN { $INC{"utf8.pm"} = "utf8.pm" } 1005 | BEGIN { 1006 | $utf8::hint_bits = 0x00800000; 1007 | $utf8::VERSION = '1.07'; 1008 | sub import { 1009 | $^H |= $utf8::hint_bits; 1010 | $enc{caller()} = $_[1] if $_[1]; 1011 | } 1012 | sub unimport { 1013 | $^H &= ~$utf8::hint_bits; 1014 | } 1015 | sub AUTOLOAD { 1016 | require "utf8_heavy.pl"; 1017 | goto &$AUTOLOAD if defined &$AUTOLOAD; 1018 | Carp::croak("Undefined subroutine $AUTOLOAD called"); 1019 | } 1020 | } 1021 | package bytes; BEGIN { $INC{"bytes.pm"} = "bytes.pm" } 1022 | BEGIN { 1023 | $bytes::VERSION = '1.03'; 1024 | $bytes::hint_bits = 0x00000008; 1025 | sub import { 1026 | $^H |= $bytes::hint_bits; 1027 | } 1028 | sub unimport { 1029 | $^H &= ~$bytes::hint_bits; 1030 | } 1031 | sub AUTOLOAD { 1032 | require "bytes_heavy.pl"; 1033 | goto &$AUTOLOAD if defined &$AUTOLOAD; 1034 | Carp::croak("Undefined subroutine $AUTOLOAD called"); 1035 | } 1036 | sub length (_); 1037 | sub chr (_); 1038 | sub ord (_); 1039 | sub substr ($$;$$); 1040 | sub index ($$;$); 1041 | sub rindex ($$;$); 1042 | } 1043 | package subs; BEGIN { $INC{"subs.pm"} = "subs.pm" } 1044 | BEGIN { 1045 | $subs::VERSION = '1.00'; 1046 | sub import { 1047 | my $callpack = caller; 1048 | my $pack = shift; 1049 | my @imports = @_; 1050 | foreach $sym (@imports) { 1051 | *{"${callpack}::$sym"} = \&{"${callpack}::$sym"}; 1052 | } 1053 | }; 1054 | } 1055 | package warnings::register; BEGIN { $INC{"warnings/register.pm"} = "warnings/register.pm" } 1056 | BEGIN { 1057 | $warnings::register::VERSION = '1.01'; 1058 | sub mkMask 1059 | { 1060 | my ($bit) = @_; 1061 | my $mask = ""; 1062 | vec($mask, $bit, 1) = 1; 1063 | return $mask; 1064 | } 1065 | sub import 1066 | { 1067 | shift; 1068 | my $package = (caller(0))[0]; 1069 | if (! defined $warnings::Bits{$package}) { 1070 | $warnings::Bits{$package} = mkMask($warnings::LAST_BIT); 1071 | vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1; 1072 | $warnings::Offsets{$package} = $warnings::LAST_BIT ++; 1073 | foreach my $k (keys %warnings::Bits) { 1074 | vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0; 1075 | } 1076 | $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT); 1077 | vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1; 1078 | } 1079 | } 1080 | } 1081 | package vars; BEGIN { $INC{"vars.pm"} = "vars.pm" } 1082 | BEGIN { 1083 | $vars::VERSION = '1.01'; 1084 | use warnings::register; 1085 | use strict qw(vars subs); 1086 | sub import { 1087 | my $callpack = caller; 1088 | my ($pack, @imports) = @_; 1089 | my ($sym, $ch); 1090 | foreach (@imports) { 1091 | if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) { 1092 | if ($sym =~ /\W/) { 1093 | if ($sym =~ /^\w+[[{].*[]}]$/) { 1094 | Carp::croak("Can't declare individual elements of hash or array"); 1095 | } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) { 1096 | warnings::warn("No need to declare built-in vars"); 1097 | } elsif (($^H &= strict::bits('vars'))) { 1098 | Carp::croak("'$_' is not a valid variable name under strict vars"); 1099 | } 1100 | } 1101 | $sym = "${callpack}::$sym" unless $sym =~ /::/; 1102 | *$sym = 1103 | ( $ch eq "\$" ? \$$sym 1104 | : $ch eq "\@" ? \@$sym 1105 | : $ch eq "\%" ? \%$sym 1106 | : $ch eq "\*" ? \*$sym 1107 | : $ch eq "\&" ? \&$sym 1108 | : do { 1109 | Carp::croak("'$_' is not a valid variable name"); 1110 | }); 1111 | } else { 1112 | Carp::croak("'$_' is not a valid variable name"); 1113 | } 1114 | } 1115 | }; 1116 | } 1117 | package version; BEGIN { $INC{"version.pm"} = "version.pm" } 1118 | BEGIN { 1119 | use strict; 1120 | use vars qw(@ISA $VERSION $CLASS *declare *qv); 1121 | $VERSION = 0.77; 1122 | $CLASS = 'version'; 1123 | sub import { 1124 | no strict 'refs'; 1125 | my ($class) = shift; 1126 | unless ($class eq 'version') { 1127 | local $^W; 1128 | *{$class.'::declare'} = \&version::declare; 1129 | *{$class.'::qv'} = \&version::qv; 1130 | } 1131 | my %args; 1132 | if (@_) { 1133 | map { $args{$_} = 1 } @_ 1134 | } else { 1135 | %args = ( 1136 | qv => 1, 1137 | 'UNIVERSAL::VERSION' => 1, 1138 | ); 1139 | } 1140 | my $callpkg = caller(); 1141 | if (exists($args{declare})) { 1142 | *{$callpkg."::declare"} = sub {return $class->declare(shift) } 1143 | unless defined(&{$callpkg.'::declare'}); 1144 | } 1145 | if (exists($args{qv})) { 1146 | *{$callpkg."::qv"} = 1147 | sub {return $class->qv(shift) } 1148 | unless defined(&{"$callpkg\::qv"}); 1149 | } 1150 | if (exists($args{'VERSION'})) { 1151 | *{$callpkg."::VERSION"} = \&version::_VERSION; 1152 | } 1153 | } 1154 | } 1155 | package if; BEGIN { $INC{"if.pm"} = "if.pm" } 1156 | BEGIN { 1157 | $VERSION = '0.05'; 1158 | sub work { 1159 | my $method = shift() ? 'import' : 'unimport'; 1160 | die "Too few arguments to `use if' (some code returning an empty list in list context?)" 1161 | if @_ < 2; 1162 | return unless shift; 1163 | my $p = $_[0]; 1164 | (my $file = "$p.pm") =~ s!::!/!g; 1165 | require $file; 1166 | my $m = $p->can($method); 1167 | goto &$m if $m; 1168 | } 1169 | sub import { shift; unshift @_, 1; goto &work } 1170 | sub unimport { shift; unshift @_, 0; goto &work } 1171 | } 1172 | package overloading; BEGIN { $INC{"overloading.pm"} = "overloading.pm" } 1173 | BEGIN { 1174 | use warnings; 1175 | no warnings qw(redefine); 1176 | use Carp (); 1177 | $overloading::VERSION = '0.01'; 1178 | my $HINT_NO_AMAGIC = 0x01000000; 1179 | sub _ops_to_nums { 1180 | map { exists $overload::numbers::names{"($_"} 1181 | ? $overload::numbers::names{"($_"} 1182 | : Carp::croak("'$_' is not a valid overload") 1183 | } @_; 1184 | } 1185 | sub import { 1186 | my ( $class, @ops ) = @_; 1187 | if ( @ops ) { 1188 | if ( $^H{overloading} ) { 1189 | vec($^H{overloading} , $_, 1) = 0 for _ops_to_nums(@ops); 1190 | } 1191 | if ( $^H{overloading} !~ /[^\0]/ ) { 1192 | delete $^H{overloading}; 1193 | $^H &= ~$HINT_NO_AMAGIC; 1194 | } 1195 | } else { 1196 | delete $^H{overloading}; 1197 | $^H &= ~$HINT_NO_AMAGIC; 1198 | } 1199 | } 1200 | sub unimport { 1201 | my ( $class, @ops ) = @_; 1202 | if ( exists $^H{overloading} or not $^H & $HINT_NO_AMAGIC ) { 1203 | if ( @ops ) { 1204 | vec($^H{overloading} ||= '', $_, 1) = 1 for _ops_to_nums(@ops); 1205 | } else { 1206 | delete $^H{overloading}; 1207 | } 1208 | } 1209 | $^H |= $HINT_NO_AMAGIC; 1210 | } 1211 | } 1212 | package DirHandle; BEGIN { $INC{"DirHandle.pm"} = "DirHandle.pm" } 1213 | BEGIN { 1214 | $DirHandle::VERSION = '1.03'; 1215 | use Carp; 1216 | use Symbol; 1217 | sub new { 1218 | @_ >= 1 && @_ <= 2 or croak 'usage: DirHandle->new( [DIRNAME] )'; 1219 | my $class = shift; 1220 | my $dh = gensym; 1221 | if (@_) { 1222 | DirHandle::open($dh, $_[0]) 1223 | or return undef; 1224 | } 1225 | bless $dh, $class; 1226 | } 1227 | sub DESTROY { 1228 | my ($dh) = @_; 1229 | local($., $@, $!, $^E, $?); 1230 | no warnings 'io'; 1231 | closedir($dh); 1232 | } 1233 | sub open { 1234 | @_ == 2 or croak 'usage: $dh->open(DIRNAME)'; 1235 | my ($dh, $dirname) = @_; 1236 | opendir($dh, $dirname); 1237 | } 1238 | sub close { 1239 | @_ == 1 or croak 'usage: $dh->close()'; 1240 | my ($dh) = @_; 1241 | closedir($dh); 1242 | } 1243 | sub read { 1244 | @_ == 1 or croak 'usage: $dh->read()'; 1245 | my ($dh) = @_; 1246 | readdir($dh); 1247 | } 1248 | sub rewind { 1249 | @_ == 1 or croak 'usage: $dh->rewind()'; 1250 | my ($dh) = @_; 1251 | rewinddir($dh); 1252 | } 1253 | } 1254 | package attributes; BEGIN { $INC{"attributes.pm"} = "attributes.pm" } 1255 | BEGIN { 1256 | $attributes::VERSION = 0.09; 1257 | @EXPORT_OK = qw(get reftype); 1258 | @EXPORT = (); 1259 | %EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]); 1260 | use strict; 1261 | sub croak { 1262 | goto &Carp::croak; 1263 | } 1264 | sub carp { 1265 | goto &Carp::carp; 1266 | } 1267 | BEGIN { bootstrap attributes } 1268 | sub import { 1269 | @_ > 2 && ref $_[2] or do { 1270 | require Exporter; 1271 | goto &Exporter::import; 1272 | }; 1273 | my (undef,$home_stash,$svref,@attrs) = @_; 1274 | my $svtype = uc reftype($svref); 1275 | my $pkgmeth; 1276 | $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES") 1277 | if defined $home_stash && $home_stash ne ''; 1278 | my @badattrs; 1279 | if ($pkgmeth) { 1280 | my @pkgattrs = _modify_attrs($svref, @attrs); 1281 | @badattrs = $pkgmeth->($home_stash, $svref, @pkgattrs); 1282 | if (!@badattrs && @pkgattrs) { 1283 | return unless warnings::enabled('reserved'); 1284 | @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs; 1285 | if (@pkgattrs) { 1286 | for my $attr (@pkgattrs) { 1287 | $attr =~ s/\(.+\z//s; 1288 | } 1289 | my $s = ((@pkgattrs == 1) ? '' : 's'); 1290 | carp "$svtype package attribute$s " . 1291 | "may clash with future reserved word$s: " . 1292 | join(' : ' , @pkgattrs); 1293 | } 1294 | } 1295 | } else { 1296 | @badattrs = _modify_attrs($svref, @attrs); 1297 | } 1298 | if (@badattrs) { 1299 | croak "Invalid $svtype attribute" . 1300 | (( @badattrs == 1 ) ? '' : 's') . 1301 | ": " . 1302 | join(' : ', @badattrs); 1303 | } 1304 | } 1305 | sub get ($) { 1306 | @_ == 1 && ref $_[0] or 1307 | croak 'Usage: '.__PACKAGE__.'::get $ref'; 1308 | my $svref = shift; 1309 | my $svtype = uc reftype $svref; 1310 | my $stash = _guess_stash $svref; 1311 | $stash = caller unless defined $stash; 1312 | my $pkgmeth; 1313 | $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES") 1314 | if defined $stash && $stash ne ''; 1315 | return $pkgmeth ? 1316 | (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) : 1317 | (_fetch_attrs($svref)) 1318 | ; 1319 | } 1320 | sub require_version { goto &UNIVERSAL::VERSION } 1321 | } 1322 | package parent; BEGIN { $INC{"parent.pm"} = "parent.pm" } 1323 | BEGIN { 1324 | use strict; 1325 | use vars qw($VERSION); 1326 | $VERSION = '0.221'; 1327 | sub import { 1328 | my $class = shift; 1329 | my $inheritor = caller(0); 1330 | if ( @_ and $_[0] eq '-norequire' ) { 1331 | shift @_; 1332 | } else { 1333 | for ( my @filename = @_ ) { 1334 | if ( $_ eq $inheritor ) { 1335 | warn "Class '$inheritor' tried to inherit from itself\n"; 1336 | }; 1337 | s{::|'}{/}g; 1338 | require "$_.pm"; 1339 | } 1340 | } 1341 | { 1342 | no strict 'refs'; 1343 | @{"$inheritor\::ISA"} = (@{"$inheritor\::ISA"} , @_); 1344 | }; 1345 | }; 1346 | } 1347 | package less; BEGIN { $INC{"less.pm"} = "less.pm" } 1348 | BEGIN { 1349 | use strict; 1350 | use warnings; 1351 | no warnings qw(redefine); 1352 | $less::VERSION = '0.02'; 1353 | sub _pack_tags { 1354 | return join ' ', @_; 1355 | } 1356 | sub _unpack_tags { 1357 | return grep { defined and length } 1358 | map { split ' ' } 1359 | grep {defined} @_; 1360 | } 1361 | sub of { 1362 | my $class = shift @_; 1363 | return unless defined wantarray; 1364 | my $hinthash = ( caller 0 )[10]; 1365 | my %tags; 1366 | @tags{ _unpack_tags( $hinthash->{$class} ) } = (); 1367 | if (@_) { 1368 | exists $tags{$_} and return !!1 for @_; 1369 | return; 1370 | } else { 1371 | return keys %tags; 1372 | } 1373 | } 1374 | sub import { 1375 | my $class = shift @_; 1376 | @_ = 'please' if not @_; 1377 | my %tags; 1378 | @tags{ _unpack_tags( @_, $^H{$class} ) } = (); 1379 | $^H{$class} = _pack_tags( keys %tags ); 1380 | return; 1381 | } 1382 | sub unimport { 1383 | my $class = shift @_; 1384 | if (@_) { 1385 | my %tags; 1386 | @tags{ _unpack_tags( $^H{$class} ) } = (); 1387 | delete @tags{ _unpack_tags(@_) }; 1388 | my $new = _pack_tags( keys %tags ); 1389 | if ( not length $new ) { 1390 | delete $^H{$class}; 1391 | } else { 1392 | $^H{$class} = $new; 1393 | } 1394 | } else { 1395 | delete $^H{$class}; 1396 | } 1397 | return; 1398 | } 1399 | } 1400 | package constant; BEGIN { $INC{"constant.pm"} = "constant.pm" } 1401 | BEGIN { 1402 | use strict; 1403 | use warnings::register; 1404 | use vars qw($VERSION %declared); 1405 | $VERSION = '1.17'; 1406 | my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD }; 1407 | $keywords{UNITCHECK}++ if $] > 5.009; 1408 | my %forced_into_main = map +($_, 1), 1409 | qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG }; 1410 | my %forbidden = (%keywords, %forced_into_main); 1411 | sub import { 1412 | my $class = shift; 1413 | return unless @_; 1414 | my $constants; 1415 | my $multiple = ref $_[0]; 1416 | my $pkg = caller; 1417 | my $symtab; 1418 | my $str_end = $] >= 5.006 ? "\\z" : "\\Z"; 1419 | if ($] > 5.009002) { 1420 | no strict 'refs'; 1421 | $symtab = \%{$pkg . '::'}; 1422 | }; 1423 | if ( $multiple ) { 1424 | if (ref $_[0] ne 'HASH') { 1425 | Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'"); 1426 | } 1427 | $constants = shift; 1428 | } else { 1429 | $constants->{+shift} = undef; 1430 | } 1431 | foreach my $name ( keys %$constants ) { 1432 | unless (defined $name) { 1433 | Carp::croak("Can't use undef as constant name"); 1434 | } 1435 | if ($name =~ /^_?[^\W_0-9]\w*$str_end/ and !$forbidden{$name}) { 1436 | } elsif ($forced_into_main{$name} and $pkg ne 'main') { 1437 | Carp::croak("Constant name '$name' is forced into main::"); 1438 | } elsif ($name =~ /^__/) { 1439 | Carp::croak("Constant name '$name' begins with '__'"); 1440 | } elsif ($name =~ /^[A-Za-z_]\w*$str_end/) { 1441 | if (warnings::enabled()) { 1442 | if ($keywords{$name}) { 1443 | warnings::warn("Constant name '$name' is a Perl keyword"); 1444 | } elsif ($forced_into_main{$name}) { 1445 | warnings::warn("Constant name '$name' is " . 1446 | "forced into package main::"); 1447 | } 1448 | } 1449 | } elsif ($name =~ /^[01]?$str_end/) { 1450 | if (@_) { 1451 | Carp::croak("Constant name '$name' is invalid"); 1452 | } else { 1453 | Carp::croak("Constant name looks like boolean value"); 1454 | } 1455 | } else { 1456 | Carp::croak("Constant name '$name' has invalid characters"); 1457 | } 1458 | { 1459 | no strict 'refs'; 1460 | my $full_name = "${pkg}::$name"; 1461 | $declared{$full_name}++; 1462 | if ($multiple || @_ == 1) { 1463 | my $scalar = $multiple ? $constants->{$name} : $_[0]; 1464 | if ($symtab && !exists $symtab->{$name}) { 1465 | Internals::SvREADONLY($scalar, 1); 1466 | $symtab->{$name} = \$scalar; 1467 | mro::method_changed_in($pkg); 1468 | } else { 1469 | *$full_name = sub () { $scalar }; 1470 | } 1471 | } elsif (@_) { 1472 | my @list = @_; 1473 | *$full_name = sub () { @list }; 1474 | } else { 1475 | *$full_name = sub () { }; 1476 | } 1477 | } 1478 | } 1479 | } 1480 | } 1481 | package filetest; BEGIN { $INC{"filetest.pm"} = "filetest.pm" } 1482 | BEGIN { 1483 | $filetest::VERSION = '1.02'; 1484 | $filetest::hint_bits = 0x00400000; 1485 | sub import { 1486 | if ( $_[1] eq 'access' ) { 1487 | $^H |= $filetest::hint_bits; 1488 | } else { 1489 | die "filetest: the only implemented subpragma is 'access'.\n"; 1490 | } 1491 | } 1492 | sub unimport { 1493 | if ( $_[1] eq 'access' ) { 1494 | $^H &= ~$filetest::hint_bits; 1495 | } else { 1496 | die "filetest: the only implemented subpragma is 'access'.\n"; 1497 | } 1498 | } 1499 | } 1500 | package overload; BEGIN { $INC{"overload.pm"} = "overload.pm" } 1501 | BEGIN { 1502 | $overload::VERSION = '1.07'; 1503 | sub nil {} 1504 | sub OVERLOAD { 1505 | $package = shift; 1506 | my %arg = @_; 1507 | my ($sub, $fb); 1508 | $ {$package . "::OVERLOAD"}{dummy}++; 1509 | *{$package . "::()"} = \&nil; 1510 | for (keys %arg) { 1511 | if ($_ eq 'fallback') { 1512 | $fb = $arg{$_}; 1513 | } else { 1514 | $sub = $arg{$_}; 1515 | if (not ref $sub and $sub !~ /::/) { 1516 | $ {$package . "::(" . $_} = $sub; 1517 | $sub = \&nil; 1518 | } 1519 | *{$package . "::(" . $_} = \&{ $sub }; 1520 | } 1521 | } 1522 | ${$package . "::()"} = $fb; 1523 | } 1524 | sub import { 1525 | $package = (caller())[0]; 1526 | shift; 1527 | $package->overload::OVERLOAD(@_); 1528 | } 1529 | sub unimport { 1530 | $package = (caller())[0]; 1531 | ${$package . "::OVERLOAD"}{dummy}++; 1532 | shift; 1533 | for (@_) { 1534 | if ($_ eq 'fallback') { 1535 | undef $ {$package . "::()"}; 1536 | } else { 1537 | delete $ {$package . "::"}{"(" . $_}; 1538 | } 1539 | } 1540 | } 1541 | sub Overloaded { 1542 | my $package = shift; 1543 | $package = ref $package if ref $package; 1544 | $package->can('()'); 1545 | } 1546 | sub ov_method { 1547 | my $globref = shift; 1548 | return undef unless $globref; 1549 | my $sub = \&{*$globref}; 1550 | return $sub if $sub ne \&nil; 1551 | return shift->can($ {*$globref}); 1552 | } 1553 | sub OverloadedStringify { 1554 | my $package = shift; 1555 | $package = ref $package if ref $package; 1556 | ov_method mycan($package, '(""'), $package 1557 | or ov_method mycan($package, '(0+'), $package 1558 | or ov_method mycan($package, '(bool'), $package 1559 | or ov_method mycan($package, '(nomethod'), $package; 1560 | } 1561 | sub Method { 1562 | my $package = shift; 1563 | if(ref $package) { 1564 | local $@; 1565 | local $!; 1566 | require Scalar::Util; 1567 | $package = Scalar::Util::blessed($package); 1568 | return undef if !defined $package; 1569 | } 1570 | ov_method mycan($package, '(' . shift), $package; 1571 | } 1572 | sub AddrRef { 1573 | my $package = ref $_[0]; 1574 | return "$_[0]" unless $package; 1575 | local $@; 1576 | local $!; 1577 | require Scalar::Util; 1578 | my $class = Scalar::Util::blessed($_[0]); 1579 | my $class_prefix = defined($class) ? "$class=" : ""; 1580 | my $type = Scalar::Util::reftype($_[0]); 1581 | my $addr = Scalar::Util::refaddr($_[0]); 1582 | return sprintf("$class_prefix$type(0x%x)", $addr); 1583 | } 1584 | *StrVal = *AddrRef; 1585 | sub mycan { 1586 | my ($package, $meth) = @_; 1587 | my $mro = mro::get_linear_isa($package); 1588 | foreach my $p (@$mro) { 1589 | my $fqmeth = $p . q{::} . $meth; 1590 | return \*{$fqmeth} if defined &{$fqmeth}; 1591 | } 1592 | return undef; 1593 | } 1594 | %constants = ( 1595 | 'integer' => 0x1000, 1596 | 'float' => 0x2000, 1597 | 'binary' => 0x4000, 1598 | 'q' => 0x8000, 1599 | 'qr' => 0x10000, 1600 | ); 1601 | %ops = ( with_assign => "+ - * / % ** << >> x .", 1602 | assign => "+= -= *= /= %= **= <<= >>= x= .=", 1603 | num_comparison => "< <= > >= == !=", 1604 | '3way_comparison'=> "<=> cmp", 1605 | str_comparison => "lt le gt ge eq ne", 1606 | binary => '& &= | |= ^ ^=', 1607 | unary => "neg ! ~", 1608 | mutators => '++ --', 1609 | func => "atan2 cos sin exp abs log sqrt int", 1610 | conversion => 'bool "" 0+', 1611 | iterators => '<>', 1612 | dereferencing => '${} @{} %{} &{} *{}', 1613 | matching => '~~', 1614 | special => 'nomethod fallback ='); 1615 | use warnings::register; 1616 | sub constant { 1617 | while (@_) { 1618 | if (@_ == 1) { 1619 | warnings::warnif ("Odd number of arguments for overload::constant"); 1620 | last; 1621 | } elsif (!exists $constants {$_ [0]}) { 1622 | warnings::warnif ("`$_[0]' is not an overloadable type"); 1623 | } elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) { 1624 | if (warnings::enabled) { 1625 | $_ [1] = "undef" unless defined $_ [1]; 1626 | warnings::warn ("`$_[1]' is not a code reference"); 1627 | } 1628 | } else { 1629 | $^H{$_[0]} = $_[1]; 1630 | $^H |= $constants{$_[0]}; 1631 | } 1632 | shift, shift; 1633 | } 1634 | } 1635 | sub remove_constant { 1636 | while (@_) { 1637 | delete $^H{$_[0]}; 1638 | $^H &= ~ $constants{$_[0]}; 1639 | shift, shift; 1640 | } 1641 | } 1642 | } 1643 | package English; BEGIN { $INC{"English.pm"} = "English.pm" } 1644 | BEGIN { 1645 | $English::VERSION = '1.04'; 1646 | @ISA = qw(Exporter); 1647 | no warnings; 1648 | my $globbed_match ; 1649 | sub import { 1650 | my $this = shift; 1651 | my @list = grep { ! /^-no_match_vars$/ } @_ ; 1652 | local $Exporter::ExportLevel = 1; 1653 | if ( @_ == @list ) { 1654 | *EXPORT = \@COMPLETE_EXPORT ; 1655 | $globbed_match ||= ( 1656 | eval q{ 1657 | *MATCH = *& ; 1658 | *PREMATCH = *` ; 1659 | *POSTMATCH = *' ; 1660 | 1 ; 1661 | } 1662 | || do { 1663 | Carp::croak("Can't create English for match leftovers: $@") ; 1664 | } 1665 | ) ; 1666 | } else { 1667 | *EXPORT = \@MINIMAL_EXPORT ; 1668 | } 1669 | Exporter::import($this,grep {s/^\$/*/} @list); 1670 | } 1671 | @MINIMAL_EXPORT = qw( 1672 | *ARG 1673 | *LAST_PAREN_MATCH 1674 | *INPUT_LINE_NUMBER 1675 | *NR 1676 | *INPUT_RECORD_SEPARATOR 1677 | *RS 1678 | *OUTPUT_AUTOFLUSH 1679 | *OUTPUT_FIELD_SEPARATOR 1680 | *OFS 1681 | *OUTPUT_RECORD_SEPARATOR 1682 | *ORS 1683 | *LIST_SEPARATOR 1684 | *SUBSCRIPT_SEPARATOR 1685 | *SUBSEP 1686 | *FORMAT_PAGE_NUMBER 1687 | *FORMAT_LINES_PER_PAGE 1688 | *FORMAT_LINES_LEFT 1689 | *FORMAT_NAME 1690 | *FORMAT_TOP_NAME 1691 | *FORMAT_LINE_BREAK_CHARACTERS 1692 | *FORMAT_FORMFEED 1693 | *CHILD_ERROR 1694 | *OS_ERROR 1695 | *ERRNO 1696 | *EXTENDED_OS_ERROR 1697 | *EVAL_ERROR 1698 | *PROCESS_ID 1699 | *PID 1700 | *REAL_USER_ID 1701 | *UID 1702 | *EFFECTIVE_USER_ID 1703 | *EUID 1704 | *REAL_GROUP_ID 1705 | *GID 1706 | *EFFECTIVE_GROUP_ID 1707 | *EGID 1708 | *PROGRAM_NAME 1709 | *PERL_VERSION 1710 | *ACCUMULATOR 1711 | *COMPILING 1712 | *DEBUGGING 1713 | *SYSTEM_FD_MAX 1714 | *INPLACE_EDIT 1715 | *PERLDB 1716 | *BASETIME 1717 | *WARNING 1718 | *EXECUTABLE_NAME 1719 | *OSNAME 1720 | *LAST_REGEXP_CODE_RESULT 1721 | *EXCEPTIONS_BEING_CAUGHT 1722 | *LAST_SUBMATCH_RESULT 1723 | @LAST_MATCH_START 1724 | @LAST_MATCH_END 1725 | ); 1726 | @MATCH_EXPORT = qw( 1727 | *MATCH 1728 | *PREMATCH 1729 | *POSTMATCH 1730 | ); 1731 | @COMPLETE_EXPORT = ( @MINIMAL_EXPORT, @MATCH_EXPORT ) ; 1732 | *ARG = *_ ; 1733 | #*LAST_PAREN_MATCH = *+ ; 1734 | *LAST_SUBMATCH_RESULT = *^N ; 1735 | #*LAST_MATCH_START = *-{ARRAY} ; 1736 | #*LAST_MATCH_END = *+{ARRAY} ; 1737 | *INPUT_LINE_NUMBER = *. ; 1738 | *NR = *. ; 1739 | *INPUT_RECORD_SEPARATOR = */ ; 1740 | *RS = */ ; 1741 | *OUTPUT_AUTOFLUSH = *| ; 1742 | *OUTPUT_FIELD_SEPARATOR = *, ; 1743 | *OFS = *, ; 1744 | *OUTPUT_RECORD_SEPARATOR = *\ ; 1745 | *ORS = *\ ; 1746 | *LIST_SEPARATOR = *" ; 1747 | *SUBSCRIPT_SEPARATOR = *; ; 1748 | *SUBSEP = *; ; 1749 | *FORMAT_PAGE_NUMBER = *% ; 1750 | *FORMAT_LINES_PER_PAGE = *= ; 1751 | #*FORMAT_LINES_LEFT = *- ; 1752 | *FORMAT_NAME = *~ ; 1753 | *FORMAT_TOP_NAME = *^ ; 1754 | *FORMAT_LINE_BREAK_CHARACTERS = *: ; 1755 | *FORMAT_FORMFEED = *^L ; 1756 | *CHILD_ERROR = *? ; 1757 | *OS_ERROR = *! ; 1758 | *ERRNO = *! ; 1759 | *OS_ERROR = *! ; 1760 | *ERRNO = *! ; 1761 | *EXTENDED_OS_ERROR = *^E ; 1762 | *EVAL_ERROR = *@ ; 1763 | *PROCESS_ID = *$ ; 1764 | *PID = *$ ; 1765 | *REAL_USER_ID = *< ; 1766 | *UID = *< ; 1767 | *EFFECTIVE_USER_ID = *> ; 1768 | *EUID = *> ; 1769 | *REAL_GROUP_ID = *( ; 1770 | *GID = *( ; 1771 | *EFFECTIVE_GROUP_ID = *) ; 1772 | *EGID = *) ; 1773 | *PROGRAM_NAME = *0 ; 1774 | *PERL_VERSION = *^V ; 1775 | *ACCUMULATOR = *^A ; 1776 | *COMPILING = *^C ; 1777 | *DEBUGGING = *^D ; 1778 | *SYSTEM_FD_MAX = *^F ; 1779 | *INPLACE_EDIT = *^I ; 1780 | *PERLDB = *^P ; 1781 | *LAST_REGEXP_CODE_RESULT = *^R ; 1782 | *EXCEPTIONS_BEING_CAUGHT = *^S ; 1783 | *BASETIME = *^T ; 1784 | *WARNING = *^W ; 1785 | *EXECUTABLE_NAME = *^X ; 1786 | *OSNAME = *^O ; 1787 | *ARRAY_BASE = *[ ; 1788 | *OFMT = *# ; 1789 | *OLD_PERL_VERSION = *] ; 1790 | #*" 1791 | } 1792 | package feature; BEGIN { $INC{"feature.pm"} = "feature.pm" } 1793 | BEGIN { 1794 | $feature::VERSION = '1.13'; 1795 | my %feature = ( 1796 | switch => 'feature_switch', 1797 | say => "feature_say", 1798 | state => "feature_state", 1799 | ); 1800 | my %feature_bundle = ( 1801 | "5.10" => [qw(switch say state)], 1802 | ); 1803 | $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"}; 1804 | sub import { 1805 | my $class = shift; 1806 | if (@_ == 0) { 1807 | croak("No features specified"); 1808 | } 1809 | while (@_) { 1810 | my $name = shift(@_); 1811 | if (substr($name, 0, 1) eq ":") { 1812 | my $v = substr($name, 1); 1813 | if (!exists $feature_bundle{$v}) { 1814 | $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/; 1815 | if (!exists $feature_bundle{$v}) { 1816 | unknown_feature_bundle(substr($name, 1)); 1817 | } 1818 | } 1819 | unshift @_, @{$feature_bundle{$v}}; 1820 | next; 1821 | } 1822 | if (!exists $feature{$name}) { 1823 | unknown_feature($name); 1824 | } 1825 | $^H{$feature{$name}} = 1; 1826 | } 1827 | } 1828 | sub unimport { 1829 | my $class = shift; 1830 | if (!@_) { 1831 | delete @^H{ values(%feature) }; 1832 | return; 1833 | } 1834 | while (@_) { 1835 | my $name = shift; 1836 | if (substr($name, 0, 1) eq ":") { 1837 | my $v = substr($name, 1); 1838 | if (!exists $feature_bundle{$v}) { 1839 | $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/; 1840 | if (!exists $feature_bundle{$v}) { 1841 | unknown_feature_bundle(substr($name, 1)); 1842 | } 1843 | } 1844 | unshift @_, @{$feature_bundle{$v}}; 1845 | next; 1846 | } 1847 | if (!exists($feature{$name})) { 1848 | unknown_feature($name); 1849 | } else { 1850 | delete $^H{$feature{$name}}; 1851 | } 1852 | } 1853 | } 1854 | sub unknown_feature { 1855 | my $feature = shift; 1856 | croak(sprintf('Feature "%s" is not supported by Perl %vd', 1857 | $feature, $^V)); 1858 | } 1859 | sub unknown_feature_bundle { 1860 | my $feature = shift; 1861 | croak(sprintf('Feature bundle "%s" is not supported by Perl %vd', 1862 | $feature, $^V)); 1863 | } 1864 | sub croak { 1865 | Carp::croak(@_); 1866 | } 1867 | } 1868 | package sort; BEGIN { $INC{"sort.pm"} = "sort.pm" } 1869 | BEGIN { 1870 | $sort::VERSION = '2.01'; 1871 | $sort::quicksort_bit = 0x00000001; 1872 | $sort::mergesort_bit = 0x00000002; 1873 | $sort::sort_bits = 0x000000FF; 1874 | $sort::stable_bit = 0x00000100; 1875 | use strict; 1876 | sub import { 1877 | shift; 1878 | if (@_ == 0) { 1879 | Carp::croak("sort pragma requires arguments"); 1880 | } 1881 | local $_; 1882 | $^H{sort} //= 0; 1883 | while ($_ = shift(@_)) { 1884 | if (/^_q(?:uick)?sort$/) { 1885 | $^H{sort} &= ~$sort::sort_bits; 1886 | $^H{sort} |= $sort::quicksort_bit; 1887 | } elsif ($_ eq '_mergesort') { 1888 | $^H{sort} &= ~$sort::sort_bits; 1889 | $^H{sort} |= $sort::mergesort_bit; 1890 | } elsif ($_ eq 'stable') { 1891 | $^H{sort} |= $sort::stable_bit; 1892 | } elsif ($_ eq 'defaults') { 1893 | $^H{sort} = 0; 1894 | } else { 1895 | Carp::croak("sort: unknown subpragma '$_'"); 1896 | } 1897 | } 1898 | } 1899 | sub unimport { 1900 | shift; 1901 | if (@_ == 0) { 1902 | Carp::croak("sort pragma requires arguments"); 1903 | } 1904 | local $_; 1905 | no warnings 'uninitialized'; 1906 | while ($_ = shift(@_)) { 1907 | if (/^_q(?:uick)?sort$/) { 1908 | $^H{sort} &= ~$sort::sort_bits; 1909 | } elsif ($_ eq '_mergesort') { 1910 | $^H{sort} &= ~$sort::sort_bits; 1911 | } elsif ($_ eq 'stable') { 1912 | $^H{sort} &= ~$sort::stable_bit; 1913 | } else { 1914 | Carp::croak("sort: unknown subpragma '$_'"); 1915 | } 1916 | } 1917 | } 1918 | sub current { 1919 | my @sort; 1920 | if ($^H{sort}) { 1921 | push @sort, 'quicksort' if $^H{sort} & $sort::quicksort_bit; 1922 | push @sort, 'mergesort' if $^H{sort} & $sort::mergesort_bit; 1923 | push @sort, 'stable' if $^H{sort} & $sort::stable_bit; 1924 | } 1925 | push @sort, 'mergesort' unless @sort; 1926 | join(' ', @sort); 1927 | } 1928 | } 1929 | package UNIVERSAL; BEGIN { $INC{"UNIVERSAL.pm"} = "UNIVERSAL.pm" } 1930 | BEGIN { 1931 | $UNIVERSAL::VERSION = '1.05'; 1932 | @EXPORT_OK = qw(isa can VERSION); 1933 | sub import { 1934 | return unless $_[0] eq __PACKAGE__; 1935 | goto &Exporter::import; 1936 | } 1937 | } 1938 | package open; BEGIN { $INC{"open.pm"} = "open.pm" } 1939 | BEGIN { 1940 | $open::VERSION = '1.07'; 1941 | my $locale_encoding; 1942 | sub _get_encname { 1943 | return ($1, Encode::resolve_alias($1)) if $_[0] =~ /^:?encoding\((.+)\)$/; 1944 | return; 1945 | } 1946 | sub croak { 1947 | goto &Carp::croak; 1948 | } 1949 | sub _drop_oldenc { 1950 | my ($h, @new) = @_; 1951 | return unless @new >= 1 && $new[-1] =~ /^:encoding\(.+\)$/; 1952 | my @old = PerlIO::get_layers($h); 1953 | return unless @old >= 3 && 1954 | $old[-1] eq 'utf8' && 1955 | $old[-2] =~ /^encoding\(.+\)$/; 1956 | require Encode; 1957 | my ($loname, $lcname) = _get_encname($old[-2]); 1958 | unless (defined $lcname) { 1959 | croak("open: Unknown encoding '$loname'"); 1960 | } 1961 | my ($voname, $vcname) = _get_encname($new[-1]); 1962 | unless (defined $vcname) { 1963 | croak("open: Unknown encoding '$voname'"); 1964 | } 1965 | if ($lcname eq $vcname) { 1966 | binmode($h, ":pop"); 1967 | } 1968 | } 1969 | sub import { 1970 | my ($class,@args) = @_; 1971 | croak("open: needs explicit list of PerlIO layers") unless @args; 1972 | my $std; 1973 | my ($in,$out) = split(/\0/,(${^OPEN} || "\0"), -1); 1974 | while (@args) { 1975 | my $type = shift(@args); 1976 | my $dscp; 1977 | if ($type =~ /^:?(utf8|locale|encoding\(.+\))$/) { 1978 | $type = 'IO'; 1979 | $dscp = ":$1"; 1980 | } elsif ($type eq ':std') { 1981 | $std = 1; 1982 | next; 1983 | } else { 1984 | $dscp = shift(@args) || ''; 1985 | } 1986 | my @val; 1987 | foreach my $layer (split(/\s+/,$dscp)) { 1988 | $layer =~ s/^://; 1989 | if ($layer eq 'locale') { 1990 | require Encode; 1991 | require encoding; 1992 | $locale_encoding = encoding::_get_locale_encoding() 1993 | unless defined $locale_encoding; 1994 | (warnings::warnif("layer", "Cannot figure out an encoding to use"), last) 1995 | unless defined $locale_encoding; 1996 | $layer = "encoding($locale_encoding)"; 1997 | $std = 1; 1998 | } else { 1999 | my $target = $layer; 2000 | $target =~ s/^(\w+)\(.+\)$/$1/; 2001 | unless(PerlIO::Layer::->find($target,1)) { 2002 | warnings::warnif("layer", "Unknown PerlIO layer '$target'"); 2003 | } 2004 | } 2005 | push(@val,":$layer"); 2006 | if ($layer =~ /^(crlf|raw)$/) { 2007 | $^H{"open_$type"} = $layer; 2008 | } 2009 | } 2010 | if ($type eq 'IN') { 2011 | _drop_oldenc(*STDIN, @val); 2012 | $in = join(' ', @val); 2013 | } elsif ($type eq 'OUT') { 2014 | _drop_oldenc(*STDOUT, @val); 2015 | $out = join(' ', @val); 2016 | } elsif ($type eq 'IO') { 2017 | _drop_oldenc(*STDIN, @val); 2018 | _drop_oldenc(*STDOUT, @val); 2019 | $in = $out = join(' ', @val); 2020 | } else { 2021 | croak "Unknown PerlIO layer class '$type'"; 2022 | } 2023 | } 2024 | ${^OPEN} = join("\0", $in, $out); 2025 | if ($std) { 2026 | if ($in) { 2027 | if ($in =~ /:utf8\b/) { 2028 | binmode(STDIN, ":utf8"); 2029 | } elsif ($in =~ /(\w+\(.+\))/) { 2030 | binmode(STDIN, ":$1"); 2031 | } 2032 | } 2033 | if ($out) { 2034 | if ($out =~ /:utf8\b/) { 2035 | binmode(STDOUT, ":utf8"); 2036 | binmode(STDERR, ":utf8"); 2037 | } elsif ($out =~ /(\w+\(.+\))/) { 2038 | binmode(STDOUT, ":$1"); 2039 | binmode(STDERR, ":$1"); 2040 | } 2041 | } 2042 | } 2043 | } 2044 | } 2045 | package NEXT; BEGIN { $INC{"NEXT.pm"} = "NEXT.pm" } 2046 | BEGIN { 2047 | $VERSION = '0.64'; 2048 | use Carp; 2049 | use strict; 2050 | use overload (); 2051 | sub NEXT::ELSEWHERE::ancestors 2052 | { 2053 | my @inlist = shift; 2054 | my @outlist = (); 2055 | while (my $next = shift @inlist) { 2056 | push @outlist, $next; 2057 | no strict 'refs'; 2058 | unshift @inlist, @{"$outlist[-1]::ISA"}; 2059 | } 2060 | return @outlist; 2061 | } 2062 | sub NEXT::ELSEWHERE::ordered_ancestors 2063 | { 2064 | my @inlist = shift; 2065 | my @outlist = (); 2066 | while (my $next = shift @inlist) { 2067 | push @outlist, $next; 2068 | no strict 'refs'; 2069 | push @inlist, @{"$outlist[-1]::ISA"}; 2070 | } 2071 | return sort { $a->isa($b) ? -1 2072 | : $b->isa($a) ? +1 2073 | : 0 } @outlist; 2074 | } 2075 | sub NEXT::ELSEWHERE::buildAUTOLOAD 2076 | { 2077 | my $autoload_name = caller() . '::AUTOLOAD'; 2078 | no strict 'refs'; 2079 | *{$autoload_name} = sub { 2080 | my ($self) = @_; 2081 | my $depth = 1; 2082 | until (((caller($depth))[3]||q{}) !~ /^\(eval\)$/) { $depth++ } 2083 | my $caller = (caller($depth))[3]; 2084 | my $wanted = $NEXT::AUTOLOAD || $autoload_name; 2085 | undef $NEXT::AUTOLOAD; 2086 | my ($caller_class, $caller_method) = do { $caller =~ m{(.*)::(.*)}g }; 2087 | my ($wanted_class, $wanted_method) = do { $wanted =~ m{(.*)::(.*)}g }; 2088 | croak "Can't call $wanted from $caller" 2089 | unless $caller_method eq $wanted_method; 2090 | my $key = ref $self && overload::Overloaded($self) 2091 | ? overload::StrVal($self) : $self; 2092 | local ($NEXT::NEXT{$key,$wanted_method}, $NEXT::SEEN) = 2093 | ($NEXT::NEXT{$key,$wanted_method}, $NEXT::SEEN); 2094 | unless ($NEXT::NEXT{$key,$wanted_method}) { 2095 | my @forebears = 2096 | NEXT::ELSEWHERE::ancestors ref $self || $self, 2097 | $wanted_class; 2098 | while (@forebears) { 2099 | last if shift @forebears eq $caller_class 2100 | } 2101 | no strict 'refs'; 2102 | @{$NEXT::NEXT{$key,$wanted_method}} = 2103 | map { 2104 | my $stash = \%{"${_}::"}; 2105 | ($stash->{$caller_method} && (*{$stash->{$caller_method}}{CODE})) 2106 | ? *{$stash->{$caller_method}}{CODE} 2107 | : () } @forebears 2108 | unless $wanted_method eq 'AUTOLOAD'; 2109 | @{$NEXT::NEXT{$key,$wanted_method}} = 2110 | map { 2111 | my $stash = \%{"${_}::"}; 2112 | ($stash->{AUTOLOAD} && (*{$stash->{AUTOLOAD}}{CODE})) 2113 | ? "${_}::AUTOLOAD" 2114 | : () } @forebears 2115 | unless @{$NEXT::NEXT{$key,$wanted_method}||[]}; 2116 | $NEXT::SEEN->{$key,*{$caller}{CODE}}++; 2117 | } 2118 | my $call_method = shift @{$NEXT::NEXT{$key,$wanted_method}}; 2119 | while (do { $wanted_class =~ /^NEXT\b.*\b(UNSEEN|DISTINCT)\b/ } 2120 | && defined $call_method 2121 | && $NEXT::SEEN->{$key,$call_method}++) { 2122 | $call_method = shift @{$NEXT::NEXT{$key,$wanted_method}}; 2123 | } 2124 | unless (defined $call_method) { 2125 | return unless do { $wanted_class =~ /^NEXT:.*:ACTUAL/ }; 2126 | (local $Carp::CarpLevel)++; 2127 | croak qq(Can't locate object method "$wanted_method" ), 2128 | qq(via package "$caller_class"); 2129 | }; 2130 | return $self->$call_method(@_[1..$#_]) if ref $call_method eq 'CODE'; 2131 | no strict 'refs'; 2132 | do { ($wanted_method=${$caller_class."::AUTOLOAD"}) =~ s/.*::// } 2133 | if $wanted_method eq 'AUTOLOAD'; 2134 | $$call_method = $caller_class."::NEXT::".$wanted_method; 2135 | return $call_method->(@_); 2136 | }; 2137 | } 2138 | no strict 'vars'; 2139 | package NEXT; NEXT::ELSEWHERE::buildAUTOLOAD(); 2140 | package NEXT::UNSEEN; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2141 | package NEXT::DISTINCT; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2142 | package NEXT::ACTUAL; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2143 | package NEXT::ACTUAL::UNSEEN; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2144 | package NEXT::ACTUAL::DISTINCT; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2145 | package NEXT::UNSEEN::ACTUAL; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2146 | package NEXT::DISTINCT::ACTUAL; @ISA = 'NEXT'; NEXT::ELSEWHERE::buildAUTOLOAD(); 2147 | package EVERY; 2148 | sub EVERY::ELSEWHERE::buildAUTOLOAD { 2149 | my $autoload_name = caller() . '::AUTOLOAD'; 2150 | no strict 'refs'; 2151 | *{$autoload_name} = sub { 2152 | my ($self) = @_; 2153 | my $depth = 1; 2154 | until (((caller($depth))[3]||q{}) !~ /^\(eval\)$/) { $depth++ } 2155 | my $caller = (caller($depth))[3]; 2156 | my $wanted = $EVERY::AUTOLOAD || $autoload_name; 2157 | undef $EVERY::AUTOLOAD; 2158 | my ($wanted_class, $wanted_method) = do { $wanted =~ m{(.*)::(.*)}g }; 2159 | my $key = ref($self) && overload::Overloaded($self) 2160 | ? overload::StrVal($self) : $self; 2161 | local $NEXT::ALREADY_IN_EVERY{$key,$wanted_method} = 2162 | $NEXT::ALREADY_IN_EVERY{$key,$wanted_method}; 2163 | return if $NEXT::ALREADY_IN_EVERY{$key,$wanted_method}++; 2164 | my @forebears = NEXT::ELSEWHERE::ordered_ancestors ref $self || $self, 2165 | $wanted_class; 2166 | @forebears = reverse @forebears if do { $wanted_class =~ /\bLAST\b/ }; 2167 | no strict 'refs'; 2168 | my %seen; 2169 | my @every = map { my $sub = "${_}::$wanted_method"; 2170 | !*{$sub}{CODE} || $seen{$sub}++ ? () : $sub 2171 | } @forebears 2172 | unless $wanted_method eq 'AUTOLOAD'; 2173 | my $want = wantarray; 2174 | if (@every) { 2175 | if ($want) { 2176 | return map {($_, [$self->$_(@_[1..$#_])])} @every; 2177 | } elsif (defined $want) { 2178 | return { map {($_, scalar($self->$_(@_[1..$#_])))} 2179 | @every 2180 | }; 2181 | } else { 2182 | $self->$_(@_[1..$#_]) for @every; 2183 | return; 2184 | } 2185 | } 2186 | @every = map { my $sub = "${_}::AUTOLOAD"; 2187 | !*{$sub}{CODE} || $seen{$sub}++ ? () : "${_}::AUTOLOAD" 2188 | } @forebears; 2189 | if ($want) { 2190 | return map { $$_ = ref($self)."::EVERY::".$wanted_method; 2191 | ($_, [$self->$_(@_[1..$#_])]); 2192 | } @every; 2193 | } elsif (defined $want) { 2194 | return { map { $$_ = ref($self)."::EVERY::".$wanted_method; 2195 | ($_, scalar($self->$_(@_[1..$#_]))) 2196 | } @every 2197 | }; 2198 | } else { 2199 | for (@every) { 2200 | $$_ = ref($self)."::EVERY::".$wanted_method; 2201 | $self->$_(@_[1..$#_]); 2202 | } 2203 | return; 2204 | } 2205 | }; 2206 | } 2207 | package EVERY::LAST; @ISA = 'EVERY'; EVERY::ELSEWHERE::buildAUTOLOAD(); 2208 | package EVERY; @ISA = 'NEXT'; EVERY::ELSEWHERE::buildAUTOLOAD(); 2209 | } 2210 | BEGIN { 2211 | if (defined &File::Glob::bootstrap) { 2212 | # miniperl doesn't have File::Glob::botstrap, so it implements glob("*") by 2213 | # calling /bin/sh echo * as a workaround. 2214 | package File::Glob; BEGIN { $INC{"File/Glob.pm"} = "File/Glob.pm"; } 2215 | use strict; 2216 | our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, $AUTOLOAD, $DEFAULT_FLAGS); 2217 | @ISA = qw(Exporter); 2218 | @EXPORT_OK = qw(bsd_glob glob GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC 2219 | GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE 2220 | GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE); 2221 | %EXPORT_TAGS = ('glob' => [qw(GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC 2222 | GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE 2223 | GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE 2224 | glob bsd_glob)]); 2225 | $VERSION = '1.06'; 2226 | sub import { 2227 | # Segfault without this. 2228 | *CORE::GLOBAL::glob = \&File::Glob::csh_glob if 0; 2229 | require Exporter; 2230 | my $i = 1; 2231 | while ($i < @_) { 2232 | if ($_[$i] =~ /^:(case|nocase|globally)$/) { 2233 | splice(@_, $i, 1); 2234 | $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case'; 2235 | $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase'; 2236 | die "unsupported: globally\n" if $1 eq 'globally'; 2237 | next; 2238 | } 2239 | ++$i; 2240 | } 2241 | goto &Exporter::import; 2242 | } 2243 | # Defines doglob, constant. 2244 | File::Glob::bootstrap($VERSION); 2245 | { 2246 | # E.g. GLOB_ABEND. 2247 | for my $name (@EXPORT_OK) { 2248 | my ($error, $val) = constant($name); 2249 | eval "sub $name { $val }" if !$error; 2250 | } 2251 | } 2252 | sub GLOB_CSH() { 2253 | GLOB_BRACE() | GLOB_NOMAGIC() | GLOB_QUOTE() | GLOB_TILDE() | GLOB_ALPHASORT() 2254 | } 2255 | $DEFAULT_FLAGS = GLOB_CSH(); 2256 | sub bsd_glob { 2257 | my ($pat,$flags) = @_; 2258 | $flags = $DEFAULT_FLAGS if @_ < 2; 2259 | return doglob($pat,$flags); 2260 | } 2261 | sub glob { 2262 | splice @_, 1; 2263 | goto &bsd_glob; 2264 | } 2265 | } 2266 | } 2267 | BEGIN { 2268 | if (defined &Cwd::bootstrap) { 2269 | # miniperl doesn't have Cwd::bootstrap, so it doesn't provide cwd 2270 | # functionality. 2271 | package Cwd; BEGIN { $INC{"Cwd.pm"} = "Cwd.pm" } 2272 | use strict; 2273 | use Exporter; 2274 | use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); 2275 | $VERSION = 3.30; 2276 | @ISA = qw(Exporter); 2277 | @EXPORT = qw(cwd getcwd fastcwd fastgetcwd); 2278 | @EXPORT_OK = qw(chdir abs_path realpath fast_realpath); 2279 | Cwd::bootstrap("$VERSION"); 2280 | *cwd = \&getcwd; 2281 | *fastgetcwd = \&getcwd; 2282 | *realpath = \&abs_path; 2283 | # Keeps track of current working directory in PWD environment var 2284 | # Usage: use Cwd 'chdir'; chdir $newdir; 2285 | my $chdir_init = 0; 2286 | sub chdir_init { 2287 | if ($ENV{'PWD'}) { 2288 | my($dd,$di) = stat('.'); 2289 | my($pd,$pi) = stat($ENV{'PWD'}); 2290 | if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) { 2291 | $ENV{'PWD'} = cwd(); 2292 | } 2293 | } else { 2294 | my $wd = cwd(); 2295 | $ENV{'PWD'} = $wd; 2296 | } 2297 | # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar) 2298 | if ($ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) { 2299 | my($pd,$pi) = stat($2); 2300 | my($dd,$di) = stat($1); 2301 | if (defined $pd and defined $dd and $di == $pi and $dd == $pd) { 2302 | $ENV{'PWD'}="$2$3"; 2303 | } 2304 | } 2305 | $chdir_init = 1; 2306 | } 2307 | sub chdir { 2308 | # Allow for no arg (chdir to HOME dir). 2309 | my $newdir = @_ ? shift : ''; 2310 | $newdir =~ s|///*|/|g unless $^O eq 'MSWin32'; 2311 | chdir_init() unless $chdir_init; 2312 | my $newpwd; 2313 | return 0 unless CORE::chdir $newdir; 2314 | # In case a file/dir handle is passed in. 2315 | if (ref $newdir eq 'GLOB') { 2316 | $ENV{'PWD'} = cwd(); 2317 | } elsif ($newdir =~ m#^/#s) { 2318 | $ENV{'PWD'} = $newdir; 2319 | } else { 2320 | my @curdir = split(m#/#,$ENV{'PWD'}); 2321 | @curdir = ('') unless @curdir; 2322 | my $component; 2323 | foreach $component (split(m#/#, $newdir)) { 2324 | next if $component eq '.'; 2325 | pop(@curdir),next if $component eq '..'; 2326 | push(@curdir,$component); 2327 | } 2328 | $ENV{'PWD'} = join('/',@curdir) || '/'; 2329 | } 2330 | 1; 2331 | } 2332 | } 2333 | } 2334 | 1; 2335 | --------------------------------------------------------------------------------