Hi,

 

You don’t need Embperl::Object. Embperl::Object is only if you need to search 
(sub-)directories, like objects.

 

You should do something the following

 

Gerald

 

 

 

use Embperl;



my $obj = Embperl::Execute({ object => 'test.epl' });



$obj -> head ;

 

 


- test.epl -



[$ sub head $]



Text in head

 

[$ endsub $]




 

---------- Forwarded message ----------
From: Thompson, John <jth...@midwestern.edu>
Date: 2010/7/27
Subject: RE: Execute({ object => '...' })
To: embperl@perl.apache.org



OK, so I’ve decided to try to use import instead. I’m seeing this error:

 

--- embperl2.pl ---

use Embperl;

 

Embperl::Execute({ inputfile => 'test.epl', 'import' => 1 });

head();

 

--- test.epl ---

[$ sub head $]

    head

[$ endsub $]

 

main

 

---

 

%perl embperl2.pl

[14900]ERR:  72:  A Embperl sub is called and no Embperl request is running   

$Embperl::req undefined DOM.xs 284 at /home/carsids/jthomp/perl/test/test.epl 
line 11.

 

I thought maybe it’d help if I was running this inside of an Apache request 
(I’m using CGI), but I get the same error.

 

 

From: Andrew O'Brien [mailto:andr...@oriel.com.au] 
Sent: Tuesday, July 27, 2010 10:07 AM
To: Thompson, John
Subject: RE: Execute({ object => '...' })



 

 

Can you use import => 1 to get all the subs into the current namespace and just 
check there?

Embperl::Object adds some overhead so I was just trying to avoid that. If thats 
not an issue then just go ahead and set up the %ENV entries according to the 
Embperl::Object doco and you're good to proceed with your $obj->can checks like 
you intended.



-----Original Message-----
From: Thompson, John [mailto:jth...@midwestern.edu]


Sent: Wed 28/07/2010 02:42
To: Andrew O'Brien
Subject: RE: Execute({ object => '...' })

You are correct, I wasn't thinking when I set up that epl file. As far
as the Execute({ sub => '...' }) option, I have been using that, however
I wanted to avoid the overhead of grep'ing the file first to see if the
function even exists. I want to call it if it exists, and not if it
doesn't. I figured the fastest way was to have Embperl process it using
object, and then do "if($obj->can('head')) { $obj->head(); }". Is there
a better way? (Also realize, that Embperl will be processing the whole
template in a second, so I figured since it does caching, I'd have very
little performance penalty.)



-----Original Message-----
From: Andrew O'Brien [mailto:andr...@oriel.com.au]
Sent: Monday, July 26, 2010 4:56 PM
To: Thompson, John; embperl@perl.apache.org
Subject: RE: Execute({ object => '...' })


> From: Thompson, John [mailto:jth...@midwestern.edu]
> Sent: Tuesday, 27 July 2010 2:47 AM

Hi John,

> I am attempting to use the Execute({ object => '...' })
> feature but am seeing strange results. Here are my two files:

Firstly, test.epl does not do what you think it does. It should read:

[$ sub head $]
[- print "head\n"; -]
[$ endsub $]


Secondly, to use embperl files as objects I believe you need to be using
Embperl::Object which has additional configuration requirements. For
offline processing I would suggest that it may be overkill.

If all you want to do is execute a sub in another file then following
approaches both work with standard Embperl:

use Embperl;
Embperl::Execute( { inputfile => 'test.epl', sub => 'head' } );
Embperl::Execute( 'test.epl#head' );

Cheers,

Andrew

> - embperl1.pl -
>
> use Embperl;
>
> 
>
> my $obj = Embperl::Execute({ object => 'test.epl' });
>
> print "[$obj]\n";
>
> ---
>
> 
>
> - test.epl -
>
> [$ sub head $]
>
>     print "head\n";
>
> [$ endsub $]
>
> 
>
> print "main\n";
>
> ---
>
> 
>
> When I execute embperl1.pl I get:
>
> 
>
> % perl embperl1.pl
>
> [0]
>
> 
>
> Any ideas? I am on HP-UX itanium ia64, Embperl 2.3.0.  I
> decided to double check and make sure Embperl passed all
> tests when I built it, it did.
>
>






 


Reply via email to