diff options
-rw-r--r-- | gv.c | 17 | ||||
-rw-r--r-- | op.c | 5 |
2 files changed, 21 insertions, 1 deletions
@@ -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 '=': @@ -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); } |