summaryrefslogtreecommitdiff
path: root/gv.c
diff options
context:
space:
mode:
Diffstat (limited to 'gv.c')
-rw-r--r--gv.c17
1 files changed, 16 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 '=':