Attempt at portability.
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index e39850e..9b944c3 100644 (file)
--- a/op.c
+++ b/op.c
@@ -3451,11 +3451,22 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
            newSTATEOP(0, Nullch, imop) ));
 
     if (packname) {
-        if (ckWARN(WARN_MISC) && !gv_stashpvn(packname, packlen, FALSE)) {
-            Perl_warner(aTHX_ WARN_MISC,
-                        "Package `%s' not found "
-                        "(did you use the incorrect case?)", packname);
-        }
+        /* The "did you use incorrect case?" warning used to be here.
+         * The problem is that on case-insensitive filesystems one
+         * might get false positives for "use" (and "require"):
+         * "use Strict" or "require CARP" will work.  This causes
+         * portability problems for the script: in case-strict
+         * filesystems the script will stop working.
+         *
+         * The "incorrect case" warning checked whether "use Foo"
+         * imported "Foo" to your namespace, but that is wrong, too:
+         * there is no requirement nor promise in the language that
+         * a Foo.pm should or would contain anything in package "Foo".
+         *
+         * There is very little Configure-wise that can be done, either:
+         * the case-sensitivity of the build filesystem of Perl does not
+         * help in guessing the case-sensitivity of the runtime environment.
+         */
         safefree(packname);
     }
 
@@ -4755,13 +4766,15 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
     name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
     if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
        SV *sv = sv_newmortal();
-       Perl_sv_setpvf(aTHX_ sv, "__ANON__[%s:%"IVdf"]",
+       Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
+                      PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
                       CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
        aname = SvPVX(sv);
     }
     else
        aname = Nullch;
-    gv = gv_fetchpv(name ? name : (aname ? aname : "__ANON__"),
+    gv = gv_fetchpv(name ? name : (aname ? aname : 
+                   (PL_curstash ? "__ANON__" : "__ANON__::__ANON__")),
                    GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
                    SVt_PVCV);
 
@@ -5179,7 +5192,9 @@ Used by C<xsubpp> to hook up XSUBs as Perl subs.
 CV *
 Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
 {
-    GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
+    GV *gv = gv_fetchpv(name ? name :
+                       (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
+                       GV_ADDMULTI, SVt_PVCV);
     register CV *cv;
 
     if ((cv = (name ? GvCV(gv) : Nullcv))) {