[ic] UserTag and require problem

Daniel Davenport DDavenport at newagedigital.com
Fri Feb 9 16:53:57 EST 2007


 

> -----Original Message-----
> From: interchange-users-bounces at icdevgroup.org 
> [mailto:interchange-users-bounces at icdevgroup.org] On Behalf 
> Of Bruno Cantieni
> Sent: 2007 February 09 -- Friday 2:52 PM
> To: interchange-users at icdevgroup.org
> Subject: RE: [ic] UserTag and require problem
> 
> > > Does anyone have a clue why the below (cut down to the 
> > bone) is not  
> > > working?
> > >
> > > UserTag serialize Routine <<EOR
> > > require Vend::serialize;
> > > sub {
> > > 	my(%v) = @_;
> > > 	my $serialized = Vend::serialize::serialize(\%v);
> > > 	return $serialized;
> > > }
> > > EOR
> > >
> > > [perl]
> > > my %data = (
> > > 	1		=> 'Yes',
> > > 	0		=> 'No',
> > > );
> > > return $Tag->serialize(%data);
> > > [/perl]
> > >
> > > This results in:
> > > Safe: Undefined subroutine &Vend::serialize::serialize 
> > called at (tag
> > > 'perl') line 4.
> > >
> > > I plopped the serialize.pm (Scott Hurring,
> > > http://hurring.com/code/perl/serialize/) into the Vend directory  
> > > and it
> > > appears to load OK when testing as in:
> > >
> > > #####
> > > my $can_do = 0;
> > > eval {
> > > 	require Vend::serialize;
> > > 	$can_do = 1;
> > > };
> > > if ($@) {
> > > 	return sub{
> > > 		::logDebug("Cannot load serialize: $@");
> > > 	}
> > > }else{
> > > 	::logDebug("Starting serializer $can_do"); # getting here with 1
> > > }
> > > #etc.
> > > #####
> > I think you may have to add the AllowGlobal directive for your  
> > catalog to do stuff like that.
> > 
> > Bill Carr
> 
> Well, the catalog in question is actully in the AllowGlobal list :(
> 
> Bruno
> 

You'll need to make sure serialize.pm actually saye "package
Vend::serialize;", as perl doesn't care what's in the .pm file -- it
just loads it.  As long as the module returns true, as far as perl
knows, all is fine.  (I notice the test code you've posted doesn't try
to call &Vend::serialize::serialize...)

You might put a test script in $IC_DIR/lib/Vend, that tries to require
the module and then actually use it.  Seems to me it'd fail, unless the
module is told to put its stuff in Vend::serialize...

Course, all this is me just guessing.  If i'm wrong, someone please
correct me :)

--
Daniel Davenport
New Age Digital
http://www.newagedigital.com 



More information about the interchange-users mailing list