[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