summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gv.c17
-rw-r--r--op.c5
2 files changed, 21 insertions, 1 deletions
diff --git a/gv.c b/gv.c
index 94d4a7e6fe..5d65d60e64 100644
--- a/gv.c
+++ b/gv.c
@@ -709,13 +709,28 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
#endif
goto magicalize;
+ case '!':
+ if(len > 1)
+ break;
+ if(sv_type == SVt_PVHV) {
+ HV* stash = gv_stashpvn("Errno",5,FALSE);
+ if(!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
+ dSP;
+ PUTBACK;
+ perl_require_pv("Errno.pm");
+ SPAGAIN;
+ stash = gv_stashpvn("Errno",5,FALSE);
+ if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
+ croak("%! is not avaliable on this machine");
+ }
+ }
+ goto magicalize;
case '#':
case '*':
if (dowarn && len == 1 && sv_type == SVt_PV)
warn("Use of $%s is deprecated", name);
/* FALL THROUGH */
case '[':
- case '!':
case '^':
case '~':
case '=':
diff --git a/op.c b/op.c
index 532b0a731d..beaac6ace2 100644
--- a/op.c
+++ b/op.c
@@ -532,6 +532,11 @@ find_threadsv(char *name)
sawampersand = TRUE;
SvREADONLY_on(sv);
/* FALL THROUGH */
+
+ /* XXX %! tied to Errno.pm needs to be added here.
+ * See gv_fetchpv(). */
+ /* case '!': */
+
default:
sv_magic(sv, 0, 0, name, 1);
}