diff -r -c p5a10/MANIFEST p5a10+p/MANIFEST *** p5a10/MANIFEST Sun Jun 12 06:47:21 1994 --- p5a10+p/MANIFEST Wed Jun 15 18:11:14 1994 *************** *** 318,323 **** --- 318,325 ---- msdos/msdos.c MS-DOS ioctl, sleep, gete?[gu]if, spawn, aspawn msdos/popen.c My_popen and my_pclose for MS-DOS msdos/usage.c How to invoke perl under MS-DOS + op.c + op.h opcode.h opcode.pl os2/Makefile Makefile for OS/2 Only in p5a10+p: PATCHES diff -r -c p5a10/Todo p5a10+p/Todo *** p5a10/Todo Sun Jun 12 06:56:45 1994 --- p5a10+p/Todo Wed Jun 15 18:11:16 1994 *************** *** 11,17 **** Make "delete $array{$key} while ($key) = each %array" safe <$handle> doesn't work intuitively if $handle is ARGV debugger X doesn't list arrays of arrays - debugger b busted Anything in the Bugs directory Regexp extensions --- 11,16 ---- *************** *** 27,32 **** --- 26,32 ---- Would be nice to have $SIG{INT} = sub { whatever }; + Warning on "foo@bar" Profiler pack "(stuff)*" Contiguous bitfields in pack/unpack Only in p5a10+p: aminiperl Only in p5a10+p: aperl diff -r -c p5a10/ext/POSIX/POSIX.xs p5a10+p/ext/POSIX/POSIX.xs *** p5a10/ext/POSIX/POSIX.xs Sun May 15 06:15:57 1994 --- p5a10+p/ext/POSIX/POSIX.xs Wed Jun 15 19:38:22 1994 *************** *** 1,7 **** #include "EXTERN.h" #include "perl.h" #include "XSUB.h" - #include <ctype.h> #include <dirent.h> #include <errno.h> --- 1,6 ---- *************** *** 83,89 **** #define waitpid(a,b,c) not_here("waitpid") #endif ! #ifndef HAS_FSETPOS #define fgetpos(a,b) not_here("fgetpos") #define fsetpos(a,b) not_here("fsetpos") typedef unsigned long fpos_t; --- 82,88 ---- #define waitpid(a,b,c) not_here("waitpid") #endif ! #if 0 #define fgetpos(a,b) not_here("fgetpos") #define fsetpos(a,b) not_here("fsetpos") typedef unsigned long fpos_t; *************** *** 103,109 **** return -1; } ! double constant(name, arg) char *name; int arg; { --- 102,109 ---- return -1; } ! static double ! constant(name, arg) char *name; int arg; { *************** *** 1082,1088 **** #endif break; case 'N': ! if (strEQ(name, "NULL")) return NULL; if (strEQ(name, "NAME_MAX")) #ifdef NAME_MAX return NAME_MAX; --- 1082,1088 ---- #endif break; case 'N': ! if (strEQ(name, "NULL")) return 0; if (strEQ(name, "NAME_MAX")) #ifdef NAME_MAX return NAME_MAX; *************** *** 2763,2769 **** tmpnam(s = 0) char * s = 0; ! SysRet abort() int --- 2763,2769 ---- tmpnam(s = 0) char * s = 0; ! void abort() int *************** *** 2773,2780 **** size_t mbstowcs(s, pwcs, n) ! char * s ! wchar_t * pwcs size_t n int --- 2773,2780 ---- size_t mbstowcs(s, pwcs, n) ! wchar_t * s ! char * pwcs size_t n int *************** *** 2838,2844 **** int duration char * ! asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0, zone = "", gmtoff = 0) int sec int min int hour --- 2838,2844 ---- int duration char * ! asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0) int sec int min int hour *************** *** 2848,2855 **** int wday int yday int isdst - char * zone - long gmtoff CODE: { struct tm mytm; --- 2848,2853 ---- *************** *** 2862,2869 **** mytm.tm_wday = wday; mytm.tm_yday = yday; mytm.tm_isdst = isdst; - mytm.tm_zone = zone; - mytm.tm_gmtoff = gmtoff; RETVAL = asctime(&mytm); } OUTPUT: --- 2860,2865 ---- *************** *** 2874,2880 **** char * ctime(time) ! Time_t time double difftime(time1, time2) --- 2870,2876 ---- char * ctime(time) ! Time_t * time double difftime(time1, time2) *************** *** 2882,2888 **** Time_t time2 SysRetLong ! mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0, zone = "", gmtoff = 0) int sec int min int hour --- 2878,2884 ---- Time_t time2 SysRetLong ! mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0) int sec int min int hour *************** *** 2892,2899 **** int wday int yday int isdst - char * zone - long gmtoff CODE: { struct tm mytm; --- 2888,2893 ---- *************** *** 2912,2918 **** RETVAL char * ! strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0, zone = "", gmtoff = 0) char * fmt int sec int min --- 2906,2912 ---- RETVAL char * ! strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0) char * fmt int sec int min *************** *** 2923,2930 **** int wday int yday int isdst - char * zone - long gmtoff CODE: { char tmpbuf[128]; --- 2917,2922 ---- *************** *** 2939,2946 **** mytm.tm_wday = wday; mytm.tm_yday = yday; mytm.tm_isdst = isdst; - mytm.tm_zone = zone; - mytm.tm_gmtoff = gmtoff; len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm); ST(0) = sv_2mortal(newSVpv(tmpbuf, len)); } --- 2931,2936 ---- *************** *** 2953,2960 **** PPCODE: sp--; EXTEND(sp,2); ! PUSHs(sv_2mortal(newSVpv(tzname[0]))); ! PUSHs(sv_2mortal(newSVpv(tzname[1]))); SysRet access(filename, mode) --- 2943,2950 ---- PPCODE: sp--; EXTEND(sp,2); ! PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0])))); ! PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1])))); SysRet access(filename, mode) diff -r -c p5a10/ext/Socket/Socket.xs p5a10+p/ext/Socket/Socket.xs *** p5a10/ext/Socket/Socket.xs Sun Jun 12 06:29:31 1994 --- p5a10+p/ext/Socket/Socket.xs Wed Jun 15 18:11:38 1994 *************** *** 12,18 **** return -1; } ! double constant(name, arg) char *name; int arg; { --- 12,19 ---- return -1; } ! static double ! constant(name, arg) char *name; int arg; { diff -r -c p5a10/ext/typemap p5a10+p/ext/typemap *** p5a10/ext/typemap Sun May 15 06:08:04 1994 --- p5a10+p/ext/typemap Wed Jun 15 19:55:25 1994 *************** *** 17,22 **** --- 17,23 ---- unsigned long * T_OPAQUEPTR char ** T_PACKED void * T_PTR + Time_t * T_PV SV * T_SV SVREF T_SVREF AV * T_AVREF *************** *** 213,219 **** T_DOUBLE sv_setnv($arg, (double)$var); T_PV ! sv_setpv((char*)$arg, $var); T_PTR sv_setnv($arg, (double)(unsigned long)$var); T_PTRREF --- 214,220 ---- T_DOUBLE sv_setnv($arg, (double)$var); T_PV ! sv_setpv((SV*)$arg, $var); T_PTR sv_setnv($arg, (double)(unsigned long)$var); T_PTRREF diff -r -c p5a10/ext/xsubpp p5a10+p/ext/xsubpp *** p5a10/ext/xsubpp Sat Jun 11 23:53:06 1994 --- p5a10+p/ext/xsubpp Wed Jun 15 18:29:28 1994 *************** *** 1,7 **** #!./miniperl # $Header$ ! $usage = "Usage: xsubpp [-ansi] [-C++] [-except] [-tm typemap] file.xs\n"; SWITCH: while ($ARGV[0] =~ s/^-//) { $flag = shift @ARGV; --- 1,7 ---- #!./miniperl # $Header$ ! $usage = "Usage: xsubpp [-ansi] [-C++] [-except] [-typemap typemap] file.xs\n"; SWITCH: while ($ARGV[0] =~ s/^-//) { $flag = shift @ARGV; *************** *** 183,189 **** if ($ansiflag) { print Q<<"EOF"; #static I32 ! #XS_${Packid}_$func_name(int, int ax, int items) #[[ EOF } --- 183,189 ---- if ($ansiflag) { print Q<<"EOF"; #static I32 ! #XS_${Packid}_$func_name(int ix, int ax, int items) #[[ EOF } *************** *** 396,402 **** # print initialization routine print qq/extern "C"\n/ if $cplusplus; ! print Q<<"EOF"; #I32 boot_$Module(ix,ax,items) #int ix; #int ax; --- 396,411 ---- # print initialization routine print qq/extern "C"\n/ if $cplusplus; ! if( $ansiflag ){ ! print Q<<"EOF"; ! #I32 boot_$Module(int ix, int ax, int items) ! #[[ ! # char* file = __FILE__; ! # ! EOF ! } ! else { ! print Q<<"EOF"; #I32 boot_$Module(ix,ax,items) #int ix; #int ax; *************** *** 405,410 **** --- 414,420 ---- # char* file = __FILE__; # EOF + } for (@Func_name) { $pname = shift(@Func_pname); *************** *** 494,499 **** --- 504,512 ---- print "\tST(0) = sv_newmortal();\n"; eval "print qq\f$expr\f"; } + } + elsif ($arg =~ /^ST\(\d+\)$/) { + eval "print qq\f$expr\f"; } } } diff -r -c p5a10/gv.c p5a10+p/gv.c *** p5a10/gv.c Sun Jun 12 04:41:36 1994 --- p5a10+p/gv.c Wed Jun 15 18:11:44 1994 *************** *** 139,146 **** } } gv = gv_fetchmeth(stash, name, nend - name); ! if (!gv && (strEQ(name,"import") || strEQ(name,"unimport"))) ! gv = &sv_yes; return gv; } --- 139,158 ---- } } gv = gv_fetchmeth(stash, name, nend - name); ! if (!gv) { ! if (strEQ(name,"import") || strEQ(name,"unimport")) ! gv = &sv_yes; ! else if (strNE(name, "AUTOLOAD")) { ! gv = gv_fetchmeth(stash, "AUTOLOAD", 8); ! if (gv && GvCV(gv)) { /* One more chance... */ ! SV *tmpstr = sv_newmortal(); ! sv_catpv(tmpstr,HvNAME(stash)); ! sv_catpvn(tmpstr,"::", 2); ! sv_catpvn(tmpstr, name, nend - name); ! sv_setsv(GvSV(gv), tmpstr); ! } ! } ! } return gv; } diff -r -c p5a10/h2xs p5a10+p/h2xs *** p5a10/h2xs Sun Jun 12 06:29:25 1994 --- p5a10+p/h2xs Wed Jun 15 18:11:16 1994 *************** *** 92,98 **** return -1; } ! double constant(name, arg) char *name; int arg; { --- 92,99 ---- return -1; } ! static double ! constant(name, arg) char *name; int arg; { diff -r -c p5a10/hints/dec_osf_1.sh p5a10+p/hints/dec_osf_1.sh *** p5a10/hints/dec_osf_1.sh Sun Jun 12 01:23:10 1994 --- p5a10+p/hints/dec_osf_1.sh Wed Jun 15 20:27:31 1994 *************** *** 1,21 **** - #d_crypt='undef' # The function is there, but it is empty - #d_odbm='undef' # We don't need both odbm and ndbm ? - gidtype='gid_t' - groupstype='int' - libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a - case `uname -m` in - mips|alpha) optimize="$optimize -O2 -Olimit 2900" - ccflags="$ccflags -std1 -D_BSD" ;; - *) ccflags="$ccflags -D_BSD" ;; - esac - #d_crypt='undef' # The function is there, but it is empty d_odbm='undef' # We don't need both odbm and ndbm gidtype='gid_t' groupstype='int' - libpth="$libpth /usr/shlib" # Use the shared libraries if possible libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a case `uname -m` in ! mips|alpha) optimize="$optimize -O2 -Olimit 2900" ! ccflags="$ccflags -std1 -D_BSD" ;; *) ccflags="$ccflags -D_BSD" ;; esac --- 1,11 ---- d_odbm='undef' # We don't need both odbm and ndbm gidtype='gid_t' groupstype='int' libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a case `uname -m` in ! mips|alpha) optimize="-g" # "$optimize -O2 -Olimit 2900" ! ccflags="$ccflags -std1 -DSTANDARD_C -D_BSD -DDEBUGGING" ;; *) ccflags="$ccflags -D_BSD" ;; esac + lddflags='-r -shared -all -no_archive -expect_unresolved "*" -s' + extensions='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/SDBM_File.xs' diff -r -c p5a10/hints/dec_osf_2.sh p5a10+p/hints/dec_osf_2.sh *** p5a10/hints/dec_osf_2.sh Sun Jun 12 01:23:11 1994 --- p5a10+p/hints/dec_osf_2.sh Wed Jun 15 20:27:37 1994 *************** *** 7,21 **** libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a optimize="-g" ccflags="$ccflags -DSTANDARD_C -DDEBUGGING" ! lddlflags='-shared -no_archive -expect_unresolved "*" -s' # -s = strip lib ! d_odbm='undef' # We don't need both odbm and ndbm ! gidtype='gid_t' ! groupstype='gid_t' ! d_voidshmat='define' ! clocktype='time_t' ! libpth="$libpth /usr/shlib" # Use the shared libraries if possible ! libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a ! optimize="-g" ! ccflags="-DSTANDARD_C -DDEBUGGING" ! lddlflags="-r -shared -all" ! extensions='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/SDBM_File.xs' --- 7,11 ---- libc='/usr/shlib/libc.so' # The archive version is /lib/libc.a optimize="-g" ccflags="$ccflags -DSTANDARD_C -DDEBUGGING" ! lddlflags='-r -shared -all' ! extensions='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/SDBM_File.xs ext/POSIX/POSIX.xs' diff -r -c p5a10/hints/linux.sh p5a10+p/hints/linux.sh *** p5a10/hints/linux.sh Sat Jun 11 23:11:42 1994 --- p5a10+p/hints/linux.sh Wed Jun 15 18:11:38 1994 *************** *** 6,12 **** bin='/usr/bin' ccflags='-I/usr/include/bsd' cppflags=' -I/usr/include/bsd' ! d_dosuid='define d_voidsig='define' gidtype='gid_t' groupstype='gid_t' --- 6,12 ---- bin='/usr/bin' ccflags='-I/usr/include/bsd' cppflags=' -I/usr/include/bsd' ! d_dosuid='define' d_voidsig='define' gidtype='gid_t' groupstype='gid_t' diff -r -c p5a10/hints/unicos.sh p5a10+p/hints/unicos.sh *** p5a10/hints/unicos.sh Sun Jun 12 01:23:13 1994 --- p5a10+p/hints/unicos.sh Wed Jun 15 18:24:24 1994 *************** *** 6,16 **** libswanted='malloc m' d_setregid='undef' d_setreuid='undef' - case `uname -r` in - 6.1*) shellflags="-m+65536" ;; - esac - ccflags="$ccflags -DHZ=__hertz -g" - usemymalloc='n' - libswanted='malloc m' - d_setregid='undef' - d_setreuid='undef' --- 6,8 ---- Only in p5a10+p: hminiperl Only in p5a10+p: hperl diff -r -c p5a10/mg.c p5a10+p/mg.c *** p5a10/mg.c Sun Jun 12 00:36:31 1994 --- p5a10+p/mg.c Wed Jun 15 18:11:18 1994 *************** *** 554,560 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 554,560 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); *************** *** 600,606 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 600,606 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); *************** *** 647,653 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 647,653 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); *************** *** 694,700 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 694,700 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); diff -r -c p5a10/op.c p5a10+p/op.c *** p5a10/op.c Sun Jun 12 00:18:08 1994 --- p5a10+p/op.c Wed Jun 15 18:22:05 1994 *************** *** 10,15 **** --- 10,35 ---- #include "EXTERN.h" #include "perl.h" + static OP *bad_type _((I32 n, char *t, OP *op, OP *kid)); + static I32 list_assignment _((OP *op)); + static OP *no_fh_allowed _((OP *op)); + static void null _((OP* op)); + static OP *scalarboolean _((OP *op)); + static OP *too_few_arguments _((OP *op)); + static OP *too_many_arguments _((OP *op)); + static OP *modkids _((OP *op, I32 type)); + static void unlist _((OP* op)); + + + static OP *bad_type _((I32 n, char *t, OP *op, OP *kid)); + static I32 list_assignment _((OP *op)); + static OP *no_fh_allowed _((OP *op)); + static void null _((OP* op)); + static OP *scalarboolean _((OP *op)); + static OP *too_few_arguments _((OP *op)); + static OP *too_many_arguments _((OP *op)); + static OP *modkids _((OP *op, I32 type)); + static void unlist _((OP* op)); static OP * no_fh_allowed(op) *************** *** 153,168 **** return 0; } - - static OP *bad_type _((I32 n, char *t, OP *op, OP *kid)); - static I32 list_assignment _((OP *op)); - static OP *no_fh_allowed _((OP *op)); - static void null _((OP* op)); - static OP *scalarboolean _((OP *op)); - static OP *too_few_arguments _((OP *op)); - static OP *too_many_arguments _((OP *op)); - static OP *modkids _((OP *op, I32 type)); - static void unlist _((OP* op)); void pad_leavemy(fill) --- 173,178 ---- diff -r -c p5a10/perl.c p5a10+p/perl.c *** p5a10/perl.c Sun Jun 12 04:31:23 1994 --- p5a10+p/perl.c Wed Jun 15 18:11:20 1994 *************** *** 581,586 **** --- 581,587 ---- myop.op_last = (OP*)&myop; } myop.op_next = Nullop; + myop.op_flags = OPf_KNOW; if (op = pp_entersubr()) run(); *************** *** 610,615 **** --- 611,617 ---- myop.op_type = OP_REQUIRE; myop.op_next = Nullop; myop.op_private = 1; + myop.op_flags = OPf_KNOW; PUTBACK; if (op = pp_require()) diff -r -c p5a10/pp.c p5a10+p/pp.c *** p5a10/pp.c Sun Jun 12 04:31:01 1994 --- p5a10+p/pp.c Wed Jun 15 18:22:09 1994 *************** *** 6976,6982 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 6976,6982 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); *************** *** 7037,7043 **** Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_STACKED; ENTER; SAVESPTR(op); --- 7037,7043 ---- Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; ENTER; SAVESPTR(op); *************** *** 7520,7526 **** sv_unref(bufstr); } if (!SvPOK(bufstr)) ! sv_setpv(bufstr, "", 0); /* avoid uninitialized warning */ buffer = SvPV(bufstr, blen); length = SvIVx(*++MARK); errno = 0; --- 7520,7526 ---- sv_unref(bufstr); } if (!SvPOK(bufstr)) ! sv_setpvn(bufstr, "", 0); /* avoid uninitialized warning */ buffer = SvPV(bufstr, blen); length = SvIVx(*++MARK); errno = 0; diff -r -c p5a10/scope.c p5a10+p/scope.c *** p5a10/scope.c Sun Jun 12 07:14:10 1994 --- p5a10+p/scope.c Wed Jun 15 18:11:31 1994 *************** *** 368,373 **** --- 368,374 ---- void (*f) _((void*)); void* p; { + SSCHECK(3); SSPUSHDPTR(f); SSPUSHPTR(p); SSPUSHINT(SAVEt_DESTRUCTOR); diff -r -c p5a10/sv.c p5a10+p/sv.c *** p5a10/sv.c Sun Jun 12 04:54:29 1994 --- p5a10+p/sv.c Wed Jun 15 18:11:34 1994 *************** *** 1638,1643 **** --- 1638,1644 ---- mg->mg_virtual = &vtbl_isaelem; break; case 'L': + SvRMAGICAL_on(sv); mg->mg_virtual = 0; break; case 'l': *************** *** 1871,1877 **** op = (OP*)&myop; Zero(op, 1, OP); myop.op_last = (OP*)&myop; ! myop.op_flags = OPf_STACKED; myop.op_next = Nullop; EXTEND(SP, 2); --- 1872,1878 ---- op = (OP*)&myop; Zero(op, 1, OP); myop.op_last = (OP*)&myop; ! myop.op_flags = OPf_KNOW|OPf_STACKED; myop.op_next = Nullop; EXTEND(SP, 2); diff -r -c p5a10/toke.c p5a10+p/toke.c *** p5a10/toke.c Sun Jun 12 03:52:19 1994 --- p5a10+p/toke.c Wed Jun 15 18:22:11 1994 *************** *** 31,37 **** static void force_ident _((char *s)); static void incline _((char *s)); static int intuit_more _((char *s)); ! static I32 lop _((I32 f, char *s)); static void missingterm _((char *s)); static void no_op _((char *what, char *s)); static void set_csh _((void)); --- 31,37 ---- static void force_ident _((char *s)); static void incline _((char *s)); static int intuit_more _((char *s)); ! static I32 lop _((I32 f, expectation x, char *s)); static void missingterm _((char *s)); static void no_op _((char *what, char *s)); static void set_csh _((void)); *************** *** 3956,3962 **** croak("Unterminated <> operator"); if (*d == '$') d++; ! while (*d && (isALNUM(*d) || *d == '\'')) d++; if (d - tokenbuf != len) { yylval.ival = OP_GLOB; --- 3956,3962 ---- croak("Unterminated <> operator"); if (*d == '$') d++; ! while (*d && (isALNUM(*d) || *d == '\'' || *d == ':')) d++; if (d - tokenbuf != len) { yylval.ival = OP_GLOB; *************** *** 3971,3981 **** if (!len) (void)strcpy(d,"ARGV"); if (*d == '$') { ! GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV); ! lex_op = (OP*)newUNOP(OP_READLINE, 0, ! newUNOP(OP_RV2GV, 0, ! newUNOP(OP_RV2SV, 0, ! newGVOP(OP_GV, 0, gv)))); yylval.ival = OP_NULL; } else { --- 3971,3989 ---- if (!len) (void)strcpy(d,"ARGV"); if (*d == '$') { ! I32 tmp; ! if (tmp = pad_findmy(d)) { ! OP *op = newOP(OP_PADSV, 0); ! op->op_targ = tmp; ! lex_op = (OP*)newUNOP(OP_READLINE, 0, newUNOP(OP_RV2GV, 0, op)); ! } ! else { ! GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV); ! lex_op = (OP*)newUNOP(OP_READLINE, 0, ! newUNOP(OP_RV2GV, 0, ! newUNOP(OP_RV2SV, 0, ! newGVOP(OP_GV, 0, gv)))); ! } yylval.ival = OP_NULL; } else {