On Thu, 17 Mar 2005, Ramprasad A Padmanabhan wrote:
> > Okay, so we're back to my other suggestion -- "require" it:
> >
> > {
> > $script = get_name_of_script(); # names matter! pick good ones!
> > $output = require $script or
> > die "Couldn't 'require' $script\n$!\n";
> > do_something($output);
> > }
> >
>
> No I cant use require. Let me tell you why.
...maybe that would have been helpful at the outset :-)
> for eg
>
> {
> $recipient = "[EMAIL PROTECTED]"; # This will come from the MTA
> $scriptname = get_scriptname($recipient);
>
> # if I do require here
> require "$scriptname";
>
> # HERE LIES THE PROBLEM
> somefunc($arg1,$arg2,$arg3) # somefunc is defined in $scriptname
> }
Okay, so now we're back to my other original suggestion -- use a module:
{
$recipient = "[EMAIL PROTECTED]"; # This will come from the MTA
$scriptname = get_scriptname($recipient);
use $scriptname qw( somefunc );
somefunc($arg1,$arg2,$arg3) # somefunc is defined in $scriptname
}
And now you just have to see that $scriptname exports somefunc().
If this gets called a lot, you may need to wrap it in an eval() so that
the namespace doesn't get clobbered. (I think, I'm a little confused as
to what would happen in that case, but it seems like an eval should
smooth out many glitches...).
> Also I cannot go on requiring files again and again, my process will
> hog all the memory then.
Well, yes, but the way you've designed this, you already run that risk.
Now if you replaced get_scriptname() with get_subroutine(), and found a
way to abstract out the bits that are different for each $recipient,
then you could simplify things tremendously, and hopefully make your
resource needs go way down:
{
$recipient = "[EMAIL PROTECTED]"; # This will come from the MTA
$sub_name = get_subroutine($recipient); # do this in one step
$sub_name->($arg1,$arg2,$arg3);
}
This will do everything without making any external calls.
--
Chris Devers
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>