[ic] Newbie: constructing Perl subroutines that use CPAN and other external modules

Ethan Rowe ethan at endpoint.com
Sat Jul 9 12:45:56 EDT 2005


Jeff Boes wrote:

>Can someone point me to examples of constructing Perl functions (either
>global subs, catalog subs, whatever) which make use of CPAN or other
>external modules? For example, I'm trying to use Date::Manip:
>
>sub foo {
>  ...
>  &Date::Manip::Date_Init();
>  ...
>}
>
>I have a "require Date::Manip" directive in my interchange.cfg file, I
>have a "use Date::Manip;" inside the function body. The function gets
>called at the appropriate time, and I get this error:
>
>  
>
>>Safe: Can't locate object method "new" via package "IO::File" (perhaps you forgot to load "IO::File"?) at /usr/local/lib/perl5/site_perl/5.8.3/Date/Manip.pm line 5345.
>>
>>    
>>
>
>I added a "require IO::File" directive, and a "use IO::File;" to the
>function, but without success. When an external module is loaded at
>configuration time, is there some restriction on what additional
>external modules it can use?
>  
>
Jeff,

Access to outside modules and such is limited, depending on the 
context.  If you're writing a catalog-level sub, usertag, etc., then 
you're limited by the Safe module -- everything in this context runs 
under Safe, and thus only has a limited number of objects available and 
no ability to use external modules.

If you want to use the Date::Manip module, you need a global-level 
routine, be it a globalsub, actionmap, usertag, or filter.  By 
global-level, you define them at the interchange level rather than the 
catalog.  It could be an include or the actual code definition right in 
your <IC_ROOT>/interchange.cfg file.

My understanding of putting require directives in your interchange.cfg 
file is that it will try to make sure that the module is available when 
the Interchange daemon starts, but it doesn't mean much beyond that -- 
you would still need to implement your code in the manner described 
above.  I've not looked into this specifically, however, so perhaps 
someone will post a correction to this assertion.

- Ethan

-- 
Ethan Rowe
End Point Corporation
ethan at endpoint.com



More information about the interchange-users mailing list