develooper Front page | perl.perl5.porters | Postings from December 2000

[PATCH] Interesting syntax idea

Thread Next
From:
Simon Cozens
Date:
December 27, 2000 03:20
Subject:
[PATCH] Interesting syntax idea
Message ID:
20001227050857.A11296@deep-dark-truthful-mirror.perlhacker.org
This makes
    foo = bar;
into
    foo() = "bar"

but
    open foo, "one" or die $!;
    open bar, "two" or die $!;
    foo = bar;
into
    *foo = *bar;

at the possible cost of sanity. Combine with previous patch, and think Pythony
thoughts.

--- op.c~	Wed Dec 27 02:29:56 2000
+++ op.c	Wed Dec 27 04:58:54 2000
@@ -1336,6 +1336,31 @@
 	PL_modcount++;
 	return o;
     case OP_CONST:
+        if (o->op_private & (OPpCONST_BARE) && 
+                !(type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)) {
+            SV *sv = ((SVOP*)o)->op_sv;
+            GV *gv;
+
+            /* Could be a filehandle */
+            if (gv = gv_fetchpv(SvPV_nolen(sv), FALSE, SVt_PVIO)) {
+                OP* gvio = newUNOP(OP_RV2GV, 0, newGVOP(OP_GV, 0, gv));
+                op_free(o);
+                o = gvio;
+            } else {
+                /* OK, it's a sub */
+                OP* enter;
+                gv = gv_fetchpv(SvPV_nolen(sv), TRUE, SVt_PVCV);
+
+                enter = newUNOP(OP_ENTERSUB,0, 
+                        newUNOP(OP_RV2CV, 0, 
+                            newGVOP(OP_GV, 0, gv)
+                        ));
+                enter->op_private |= OPpLVAL_INTRO;
+                op_free(o);
+                o = enter;
+            }
+            break;
+        }
 	if (!(o->op_private & (OPpCONST_ARYBASE)))
 	    goto nomod;
 	if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {

-- 
It's much better to have people flaming in the flesh.  -Al Aho

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About