> Very nice work, Pratik. The only problem is that it syncs SetEnv|PassEvn
> <=> %ENV completely twice for each <Perl>..</Perl>, PerlRequire and
> PerlModule, which is not very effective. It would be nice to keep track of
> just what keys have changed.
>
I need a little help here. MP2 directly uses Perl API call eval_pv()
for <Perl>..</Perl>. Similarly, it uses Perl API for PerlRequire and
PerlModule. How can I get the list of %ENV variables that got changed
in <Perl>..</Perl>, PerlRequire or PerlModule ?
> Regardless, we need to have the tests, since it looks that what you need
> is the right thing.
>
> Of course it'd be nice to have a more efficient solution.
>
I tried to populate %ENV on encountering PerlPassEnv & PerlSetEnv, but
"HV *hv = ENVHV;" statement in the new procedure that I wrote ( and
called it on PerlPassEnv and PerlSetEnv ) - gave me segmentation
fault. The procedure was something like below :
void modperl_env_hv_populate(pTHX_ char *key, char *val)
{
HV *hv = ENVHV;
I32 klen = strlen(key);
SV **svp = hv_fetch(hv, key, klen, FALSE);
if (svp) {
sv_setpv(*svp, val);
}
else {
SV *sv = newSVpv(val, 0);
hv_store(hv, key, klen, sv, FALSE);
modperl_envelem_tie(sv, key, klen);
svp = &sv;
}
SvTAINTED_on(*svp);
}
Any idea ?
If we populate %ENV on occurance of PerlPassEnv and PerlSetEnv, there
won't be any need modperl_env_sync_tables2env() call and only
modperl_env_sync_env2tables() will be required at the end of every
<Perl>..</Perl>, PerlRequire & PerlModule.
Thanks,
Pratik
---
http://pratik.syslock.org
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]