Mailing List Archive

@param seems to be shared between Execute calls
Hi.

We're seeing an odd bug where @param seems to be shared between Execute
calls in the same process. The following code is a test case for this:

#!/usr/bin/perl -w

use strict;
use Embperl;

my $output1;

my $input = '[- $param[0]->{hello} = 42; -]';

Embperl::Execute({
inputfile => "blah",
input => \$input,
output => \$output1,
});

my $output2;
my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';

Embperl::Execute({
inputfile => "blah",
input => \$input2,
output => \$output2
});

Which on my machine outputs:

$VAR1 = [
{
'hello' => 42
}
];

Surely this shouldn't happen?

--
Michael Stevens
Dianomi Ltd
18 Buckingham Gate
London SW1E 6LB

Tel: 020 7802 5530
Fax: 020 7630 7356
www.dianomi.com

The information in this message and any attachment is intended for the
addressee and is confidential and may be subject to legal privilege.
Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
EC3N 2SG. Registered in England and Wales with Company Registration
Number 4513809. VAT registration number: 809754988

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
Re: @param seems to be shared between Execute calls [ In reply to ]
Note that, under Apache, the cleanup code happens at the end of each
request - each of which could have dozens of Execute calls, between which
it is very definitely NOT called.

I have not used Embperl much from within server scripts, but in my limited
use there, I've never seen the cleanup code fire. I suspect each script
is considered 'a request' for the purposes of the cleanup code (well, as
far as docs are concerned. I don't know if the code actually fires on
END.)

--
Ed Grimm
Identity Services



From:
Michael Stevens <michael.stevens@dianomi.com>
To:
embperl@perl.apache.org
Cc:
Michael Smith <michael.smith@dianomi.com>, cabell.demarcellus@dianomi.com
Date:
07/20/2010 10:12 AM
Subject:
@param seems to be shared between Execute calls



Hi.

We're seeing an odd bug where @param seems to be shared between Execute
calls in the same process. The following code is a test case for this:

#!/usr/bin/perl -w

use strict;
use Embperl;

my $output1;

my $input = '[- $param[0]->{hello} = 42; -]';

Embperl::Execute({
inputfile => "blah",
input => \$input,
output => \$output1,
});

my $output2;
my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';

Embperl::Execute({
inputfile => "blah",
input => \$input2,
output => \$output2
});

Which on my machine outputs:

$VAR1 = [
{
'hello' => 42
}
];

Surely this shouldn't happen?

--
Michael Stevens
Dianomi Ltd
18 Buckingham Gate
London SW1E 6LB

Tel: 020 7802 5530
Fax: 020 7630 7356
www.dianomi.com

The information in this message and any attachment is intended for the
addressee and is confidential and may be subject to legal privilege.
Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
EC3N 2SG. Registered in England and Wales with Company Registration
Number 4513809. VAT registration number: 809754988

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
Re: @param seems to be shared between Execute calls [ In reply to ]
My problem is slightly different - though possibly a manifestation of the
same thing. I find that param isn't cleaned up between requests.

I have two epl files:

set.epl:
[- $param[0]->{'test'} = 1 -]

get.epl
[+ Dumper(@param) +]

I find that the data from set.epl turns up when I make a subsequent request
for get.epl (in practice it's a bit more random than that if one is running
multiple processes, so I make a few requests for set.epl and then a few for
get.epl)

This only seems to be relevant if I reference param in the epl file I am
calling directly. If I reference it in epl files which are loaded in by
Execute, then they do appear to get cleaned up.

Michael


On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <ed_grimm@raytheon.com> wrote:

> Note that, under Apache, the cleanup code happens at the end of each
> request - each of which could have dozens of Execute calls, between which it
> is very definitely NOT called.
>
> I have not used Embperl much from within server scripts, but in my limited
> use there, I've never seen the cleanup code fire. I suspect each script is
> considered 'a request' for the purposes of the cleanup code (well, as far as
> docs are concerned. I don't know if the code actually fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
>
> From: Michael Stevens <michael.stevens@dianomi.com> To:
> embperl@perl.apache.org Cc: Michael Smith <michael.smith@dianomi.com>,
> cabell.demarcellus@dianomi.com Date: 07/20/2010 10:12 AM Subject: @param
> seems to be shared between Execute calls
> ------------------------------
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared between Execute
> calls in the same process. The following code is a test case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org
>
>
>
Re: @param seems to be shared between Execute calls [ In reply to ]
Hi,

Am 21.07.2010 um 11:05 schrieb Michael Smith:

> My problem is slightly different - though possibly a manifestation of the same thing. I find that param isn't cleaned up between requests.
>
> I have two epl files:
>
> set.epl:
> [- $param[0]->{'test'} = 1 -]
>
> get.epl
> [+ Dumper(@param) +]
>
> I find that the data from set.epl turns up when I make a subsequent request for get.epl (in practice it's a bit more random than that if one is running multiple processes, so I make a few requests for set.epl and then a few for get.epl)
>
> This only seems to be relevant if I reference param in the epl file I am calling directly. If I reference it in epl files which are loaded in by Execute, then they do appear to get cleaned up.

I think, in "set.epl" you create a global variable "@param" and fill some values in it. Global variables are not cleaned up after the request, so "get.epl" will see this global var later, if you hit an apache process which ran "set.epl" before. This is also a good way to eat all memory of the apache processes.... :-(

I think, this would also work if you name it "$foo[0]...." - so there is no magic in "@param", if it is not used in an "Execute"-Call.

You may also take care of nested calls of epl-files: the @param is the same for all calls, so you might get some strange effects there...


With best regards

Dirk Melchers
/// IT/Software-Entwicklung ///

--
NUREG GmbH ///
Dorfäckerstraße 31 | 90427 Nürnberg | Germany
Tel. +49-911-32002-256 | Fax +49-911-32002-299
Mobil +49-172-9354670 | www.nureg.de
Nürnberg HRB 22653 | USt.ID DE 814 685 653
Geschäftsführer: Michael Schmidt, Stefan Boas


---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
RE: @param seems to be shared between Execute calls [ In reply to ]
Hi Michael,

 

@param is only intented to be used to pass parameters to Execute. Setting it directly might work or might not…

 

If you want to share data inside a request use

 

 $epreq -> {test} = 1 ;

 

The hash of $epreq is not used by Embperl itself, so you are free to use it and it exists exactly for the live time of one Apache request

 

Gerald

 

 

 

From: Michael Smith [mailto:smithm@gmail.com]
Sent: Wednesday, July 21, 2010 11:05 AM
To: embperl@perl.apache.org
Cc: Michael Stevens; cabell.demarcellus@dianomi.com; Michael Smith
Subject: Re: @param seems to be shared between Execute calls



 

My problem is slightly different - though possibly a manifestation of the same thing.  I find that param isn't cleaned up between requests.

 


I have two epl files:


 


set.epl:


[- $param[0]->{'test'} = 1 -]


 


get.epl


[+ Dumper(@param) +]



 


I find that the data from set.epl turns up when I make a subsequent request for get.epl (in practice it's a bit more random than that if one is running multiple processes, so I make a few requests for set.epl and then a few for get.epl)


 


This only seems to be relevant if I reference param in the epl file I am calling directly.  If I reference it in epl files which are loaded in by Execute, then they do appear to get cleaned up.


 


Michael


 


 

On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <ed_grimm@raytheon.com> wrote:

Note that, under Apache, the cleanup code happens at the end of each request - each of which could have dozens of Execute calls, between which it is very definitely NOT called.

I have not used Embperl much from within server scripts, but in my limited use there, I've never seen the cleanup code fire.  I suspect each script is considered 'a request' for the purposes of the cleanup code (well, as far as docs are concerned.  I don't know if the code actually fires on END.)

--
Ed Grimm
Identity Services



From:

Michael Stevens <michael.stevens@dianomi.com>

To:

embperl@perl.apache.org

Cc:

Michael Smith <michael.smith@dianomi.com>, cabell.demarcellus@dianomi.com

Date:

07/20/2010 10:12 AM

Subject:

@param seems to be shared between Execute calls

 





Hi.

We're seeing an odd bug where @param seems to be shared between Execute
calls in the same process. The following code is a test case for this:

#!/usr/bin/perl -w

use strict;
use Embperl;

my $output1;

my $input = '[- $param[0]->{hello} = 42; -]';

Embperl::Execute({
                inputfile => "blah",
                input => \$input,
                output => \$output1,
                });

my $output2;
my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';

Embperl::Execute({
                                 inputfile => "blah",
                                 input => \$input2,
                                 output => \$output2
                });

Which on my machine outputs:

$VAR1 = [.
          {
            'hello' => 42
          }
        ];

Surely this shouldn't happen?

--
Michael Stevens
Dianomi Ltd
18 Buckingham Gate
London SW1E 6LB

Tel: 020 7802 5530
Fax: 020 7630 7356
www.dianomi.com

The information in this message and any attachment is intended for the
addressee and is confidential and may be subject to legal privilege.
Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
EC3N 2SG. Registered in England and Wales with Company Registration
Number 4513809. VAT registration number: 809754988

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org




 
Re: @param seems to be shared between Execute calls [ In reply to ]
My actual problem is occuring under Apache, and what I'm expecting is
for things to be cleaned up between requests, which isn't happening.

But even this small test case is not the way I'd expect things to behave.

On 20/07/10 22:20, Ed Grimm wrote:
> Note that, under Apache, the cleanup code happens at the end of each
> request - each of which could have dozens of Execute calls, between
> which it is very definitely NOT called.
>
> I have not used Embperl much from within server scripts, but in my
> limited use there, I've never seen the cleanup code fire. I suspect each
> script is considered 'a request' for the purposes of the cleanup code
> (well, as far as docs are concerned. I don't know if the code actually
> fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
>
> From: Michael Stevens <michael.stevens@dianomi.com>
> To: embperl@perl.apache.org
> Cc: Michael Smith <michael.smith@dianomi.com>,
> cabell.demarcellus@dianomi.com
> Date: 07/20/2010 10:12 AM
> Subject: @param seems to be shared between Execute calls
>
>
> ------------------------------------------------------------------------
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared between Execute
> calls in the same process. The following code is a test case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org
>
>


--
Michael Stevens
Dianomi Ltd
18 Buckingham Gate
London SW1E 6LB

Tel: 020 7802 5530
Fax: 020 7630 7356
www.dianomi.com

The information in this message and any attachment is intended for the
addressee and is confidential and may be subject to legal privilege.
Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
EC3N 2SG. Registered in England and Wales with Company Registration
Number 4513809. VAT registration number: 809754988

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
RE: @param seems to be shared between Execute calls [ In reply to ]
@param is a special variable and you use it in an unsupported way (see my other mail).

Any other global should be cleaned up at the end of the request

Gerald


> -----Original Message-----
> From: Michael Stevens [mailto:michael.stevens@dianomi.com]
> Sent: Wednesday, July 21, 2010 12:46 PM
> To: Ed Grimm
> Cc: cabell.demarcellus@dianomi.com; embperl@perl.apache.org; Michael
> Smith
> Subject: Re: @param seems to be shared between Execute calls
>
> My actual problem is occuring under Apache, and what I'm expecting is
> for things to be cleaned up between requests, which isn't happening.
>
> But even this small test case is not the way I'd expect things to
> behave.
>
> On 20/07/10 22:20, Ed Grimm wrote:
> > Note that, under Apache, the cleanup code happens at the end of each
> > request - each of which could have dozens of Execute calls, between
> > which it is very definitely NOT called.
> >
> > I have not used Embperl much from within server scripts, but in my
> > limited use there, I've never seen the cleanup code fire. I suspect
> each
> > script is considered 'a request' for the purposes of the cleanup code
> > (well, as far as docs are concerned. I don't know if the code
> actually
> > fires on END.)
> >
> > --
> > Ed Grimm
> > Identity Services
> >
> >
> > From: Michael Stevens <michael.stevens@dianomi.com>
> > To: embperl@perl.apache.org
> > Cc: Michael Smith <michael.smith@dianomi.com>,
> > cabell.demarcellus@dianomi.com
> > Date: 07/20/2010 10:12 AM
> > Subject: @param seems to be shared between Execute calls
> >
> >
> > ---------------------------------------------------------------------
> ---
> >
> >
> >
> > Hi.
> >
> > We're seeing an odd bug where @param seems to be shared between
> Execute
> > calls in the same process. The following code is a test case for
> this:
> >
> > #!/usr/bin/perl -w
> >
> > use strict;
> > use Embperl;
> >
> > my $output1;
> >
> > my $input = '[- $param[0]->{hello} = 42; -]';
> >
> > Embperl::Execute({
> > inputfile => "blah",
> > input => \$input,
> > output => \$output1,
> > });
> >
> > my $output2;
> > my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
> >
> > Embperl::Execute({
> > inputfile => "blah",
> > input => \$input2,
> > output => \$output2
> > });
> >
> > Which on my machine outputs:
> >
> > $VAR1 = [.
> > {
> > 'hello' => 42
> > }
> > ];
> >
> > Surely this shouldn't happen?
> >
> > --
> > Michael Stevens
> > Dianomi Ltd
> > 18 Buckingham Gate
> > London SW1E 6LB
> >
> > Tel: 020 7802 5530
> > Fax: 020 7630 7356
> > www.dianomi.com
> >
> > The information in this message and any attachment is intended for
> the
> > addressee and is confidential and may be subject to legal privilege.
> > Dianomi Ltd, Registered Office: One America Square, Crosswall,
> London.
> > EC3N 2SG. Registered in England and Wales with Company Registration
> > Number 4513809. VAT registration number: 809754988
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> > For additional commands, e-mail: embperl-help@perl.apache.org
> >
> >
>
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
Re: @param seems to be shared between Execute calls [ In reply to ]
Thanks Gerald,

That's good to know for the future. Is there a way to know if the code has
been called through Execute? I am actually using the same code both
directly and via Execute.

Michael

On Wed, Jul 21, 2010 at 10:19 AM, Gerald Richter - ECOS <
gerald.richter@ecos.de> wrote:

> Hi Michael,
>
>
>
> @param is only intented to be used to pass parameters to Execute. Setting
> it directly might work or might not…
>
>
>
> If you want to share data inside a request use
>
>
>
> $epreq -> {test} = 1 ;
>
>
>
> The hash of $epreq is not used by Embperl itself, so you are free to use it
> and it exists exactly for the live time of one Apache request
>
>
>
> Gerald
>
>
>
>
>
>
>
> *From:* Michael Smith [mailto:smithm@gmail.com]
> *Sent:* Wednesday, July 21, 2010 11:05 AM
>
> *To:* embperl@perl.apache.org
> *Cc:* Michael Stevens; cabell.demarcellus@dianomi.com; Michael Smith
> *Subject:* Re: @param seems to be shared between Execute calls
>
>
>
> My problem is slightly different - though possibly a manifestation of the
> same thing. I find that param isn't cleaned up between requests.
>
>
>
> I have two epl files:
>
>
>
> set.epl:
>
> [- $param[0]->{'test'} = 1 -]
>
>
>
> get.epl
>
> [+ Dumper(@param) +]
>
>
>
> I find that the data from set.epl turns up when I make a subsequent request
> for get.epl (in practice it's a bit more random than that if one is running
> multiple processes, so I make a few requests for set.epl and then a few for
> get.epl)
>
>
>
> This only seems to be relevant if I reference param in the epl file I am
> calling directly. If I reference it in epl files which are loaded in by
> Execute, then they do appear to get cleaned up.
>
>
>
> Michael
>
>
>
>
>
> On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <ed_grimm@raytheon.com> wrote:
>
> Note that, under Apache, the cleanup code happens at the end of each
> request - each of which could have dozens of Execute calls, between which it
> is very definitely NOT called.
>
> I have not used Embperl much from within server scripts, but in my limited
> use there, I've never seen the cleanup code fire. I suspect each script is
> considered 'a request' for the purposes of the cleanup code (well, as far as
> docs are concerned. I don't know if the code actually fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
> From:
>
> Michael Stevens <michael.stevens@dianomi.com>
>
> To:
>
> embperl@perl.apache.org
>
> Cc:
>
> Michael Smith <michael.smith@dianomi.com>, cabell.demarcellus@dianomi.com
>
> Date:
>
> 07/20/2010 10:12 AM
>
> Subject:
>
> @param seems to be shared between Execute calls
>
>
> ------------------------------
>
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared between Execute
> calls in the same process. The following code is a test case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org
>
>
>
Re: @param seems to be shared between Execute calls [ In reply to ]
Hi Ed,

Thanks for the email. I'm actually using @param to return data (as well as
the HTML) to the epl script which is calling another one via Execute.
Perhaps there's a better way.

Michael


On Fri, Jul 23, 2010 at 4:38 AM, Ed Grimm <ed_grimm@raytheon.com> wrote:

> If your Embperl pages are calling regular perl module code that uses
> @param, couldn't you just pass it from your Embperl page as a parameter,
> rather than using it as a global?
>
> Alternatively, if you are talking about code within an Embperl page, how do
> you process those without going through Execute? Note that the standard
> apache handler calls Execute, last I checked. I seem to recall there's a
> few other methods to run Embperl pages - but ultimately, they all call
> Execute. Disclaimer: I haven't looked in a while, and it's late, and I'm
> tired.
>
> --
> Ed Grimm
> Identity Services
>
>
> From: Michael Smith <smithm@gmail.com> To:
> Gerald Richter - ECOS <gerald.richter@ecos.de>
> Cc: embperl@perl.apache.org, Michael Stevens <michael.stevens@dianomi.com>,
> cabell.demarcellus@dianomi.com, Michael Smith <michael.smith@dianomi.com>
> Date: 07/22/2010 06:25 PM Subject: Re: @param seems to be shared between
> Execute calls
> ------------------------------
>
>
>
> Thanks Gerald,
>
> That's good to know for the future. Is there a way to know if the code has
> been called through Execute? I am actually using the same code both
> directly and via Execute.
>
> Michael
>
> On Wed, Jul 21, 2010 at 10:19 AM, Gerald Richter - ECOS <*
> gerald.richter@ecos.de* <gerald.richter@ecos.de>> wrote:
> Hi Michael,
>
>
>
> @param is only intented to be used to pass parameters to Execute. Setting
> it directly might work or might not…
>
>
>
> If you want to share data inside a request use
>
>
>
> $epreq -> {test} = 1 ;
>
>
>
> The hash of $epreq is not used by Embperl itself, so you are free to use it
> and it exists exactly for the live time of one Apache request
>
>
>
> Gerald
>
>
>
>
>
>
>
> *From:* Michael Smith [mailto:*smithm@gmail.com* <smithm@gmail.com>] *
> Sent:* Wednesday, July 21, 2010 11:05 AM
>
> *
> To:* *embperl@perl.apache.org* <embperl@perl.apache.org>
> *Cc:* Michael Stevens; *cabell.demarcellus@dianomi.com*<cabell.demarcellus@dianomi.com>;
> Michael Smith*
> Subject:* Re: @param seems to be shared between Execute calls
>
>
>
> My problem is slightly different - though possibly a manifestation of the
> same thing. I find that param isn't cleaned up between requests.
>
>
>
> I have two epl files:
>
>
>
> set.epl:
>
> [- $param[0]->{'test'} = 1 -]
>
>
>
> get.epl
>
> [+ Dumper(@param) +]
>
>
>
> I find that the data from set.epl turns up when I make a subsequent request
> for get.epl (in practice it's a bit more random than that if one is running
> multiple processes, so I make a few requests for set.epl and then a few for
> get.epl)
>
>
>
> This only seems to be relevant if I reference param in the epl file I am
> calling directly. If I reference it in epl files which are loaded in by
> Execute, then they do appear to get cleaned up.
>
>
>
> Michael
>
>
>
>
>
> On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <*ed_grimm@raytheon.com*<ed_grimm@raytheon.com>>
> wrote:
>
> Note that, under Apache, the cleanup code happens at the end of each
> request - each of which could have dozens of Execute calls, between which it
> is very definitely NOT called.
>
> I have not used Embperl much from within server scripts, but in my limited
> use there, I've never seen the cleanup code fire. I suspect each script is
> considered 'a request' for the purposes of the cleanup code (well, as far as
> docs are concerned. I don't know if the code actually fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
> From: Michael Stevens <*michael.stevens@dianomi.com*<michael.stevens@dianomi.com>
> > To: *embperl@perl.apache.org* <embperl@perl.apache.org> Cc: Michael
> Smith <*michael.smith@dianomi.com* <michael.smith@dianomi.com>>, *
> cabell.demarcellus@dianomi.com* <cabell.demarcellus@dianomi.com> Date: 07/20/2010
> 10:12 AM Subject: @param seems to be shared between Execute calls
>
>
>
> ------------------------------
>
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared between Execute
> calls in the same process. The following code is a test case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356*
> **www.dianomi.com* <http://www.dianomi.com/>
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: *embperl-unsubscribe@perl.apache.org*<embperl-unsubscribe@perl.apache.org>
> For additional commands, e-mail: *embperl-help@perl.apache.org*<embperl-help@perl.apache.org>
>
>
>
>
RE: @param seems to be shared between Execute calls [ In reply to ]
Hi Michael,

> Thanks for the email. I'm actually using @param to return
> data (as well as the HTML) to the epl script which is calling
> another one via Execute. Perhaps there's a better way.

I think you may just be missing one piece of the puzzle: using
references with the param argument to the Execute function. To slightly
rewrite an example posted previously:

use Embperl;
use Data::Dumper;

my $data = {};

my $output1;
my $input = '[- $param[0]->{hello} = 42; -]';

Embperl::Execute({ inputfile => "blah",
input => \$input,
output => \$output1,
param => [ $data ],
});

print "Execute of file 1, data is currently set to:\n" . Dumper($data);

my $output2;
my $input2 = 'Hello! I was executed with the following arguments: [+ do
{ use Data::Dumper; Dumper(\@param); } +]';

Embperl::Execute({ inputfile => "blah",
input => \$input2,
output => \$output2,
param => [ $data ],
});

print "Execute of file 2, data is currently set to:\n" . Dumper($data);

print "Output of Execute() call:
$output2
";

This yields:

Execute of file 1, data is currently set to:
$VAR1 = {
'hello' => 42
};
Execute of file 2, data is currently set to:
$VAR1 = {
'hello' => 42
};
Output of Execute() call:
Hello! I was executed with the following arguments: $VAR1 = [
{
'hello' =&gt; 42
}
];

> On Fri, Jul 23, 2010 at 4:38 AM, Ed Grimm
> <ed_grimm@raytheon.com> wrote:
>
>
> If your Embperl pages are calling regular perl module
> code that uses @param, couldn't you just pass it from your
> Embperl page as a parameter, rather than using it as a global?
>
> Alternatively, if you are talking about code within an
> Embperl page, how do you process those without going through
> Execute? Note that the standard apache handler calls
> Execute, last I checked. I seem to recall there's a few
> other methods to run Embperl pages - but ultimately, they all
> call Execute. Disclaimer: I haven't looked in a while, and
> it's late, and I'm tired.
>
> --
> Ed Grimm
> Identity Services
>
>
>
> From: Michael Smith <smithm@gmail.com>
> To: Gerald Richter - ECOS <gerald.richter@ecos.de>
> Cc: embperl@perl.apache.org, Michael Stevens
> <michael.stevens@dianomi.com>,
> cabell.demarcellus@dianomi.com, Michael Smith
> <michael.smith@dianomi.com>
> Date: 07/22/2010 06:25 PM
> Subject: Re: @param seems to be shared between Execute calls
>
> ________________________________
>
>
>
>
> Thanks Gerald,
>
> That's good to know for the future. Is there a way to
> know if the code has been called through Execute? I am
> actually using the same code both directly and via Execute.
>
> Michael
>
> On Wed, Jul 21, 2010 at 10:19 AM, Gerald Richter - ECOS
> <gerald.richter@ecos.de <mailto:gerald.richter@ecos.de> > wrote:
> Hi Michael,
>
>
>
> @param is only intented to be used to pass parameters
> to Execute. Setting it directly might work or might not...
>
>
>
> If you want to share data inside a request use
>
>
>
> $epreq -> {test} = 1 ;
>
>
>
> The hash of $epreq is not used by Embperl itself, so
> you are free to use it and it exists exactly for the live
> time of one Apache request
>
>
>
> Gerald
>
>
>
>
>
>
>
> From: Michael Smith [mailto:smithm@gmail.com
> <mailto:smithm@gmail.com> ]
> Sent: Wednesday, July 21, 2010 11:05 AM
>
>
> To: embperl@perl.apache.org <mailto:embperl@perl.apache.org>
> Cc: Michael Stevens; cabell.demarcellus@dianomi.com
> <mailto:cabell.demarcellus@dianomi.com> ; Michael Smith
> Subject: Re: @param seems to be shared between Execute calls
>
>
>
> My problem is slightly different - though possibly a
> manifestation of the same thing. I find that param isn't
> cleaned up between requests.
>
>
>
> I have two epl files:
>
>
>
> set.epl:
>
> [- $param[0]->{'test'} = 1 -]
>
>
>
> get.epl
>
> [+ Dumper(@param) +]
>
>
>
> I find that the data from set.epl turns up when I make
> a subsequent request for get.epl (in practice it's a bit more
> random than that if one is running multiple processes, so I
> make a few requests for set.epl and then a few for get.epl)
>
>
>
> This only seems to be relevant if I reference param in
> the epl file I am calling directly. If I reference it in epl
> files which are loaded in by Execute, then they do appear to
> get cleaned up.
>
>
>
> Michael
>
>
>
>
>
> On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm
> <ed_grimm@raytheon.com <mailto:ed_grimm@raytheon.com> > wrote:
>
> Note that, under Apache, the cleanup code happens at
> the end of each request - each of which could have dozens of
> Execute calls, between which it is very definitely NOT called.
>
> I have not used Embperl much from within server
> scripts, but in my limited use there, I've never seen the
> cleanup code fire. I suspect each script is considered 'a
> request' for the purposes of the cleanup code (well, as far
> as docs are concerned. I don't know if the code actually
> fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
>
>
>
> From: Michael Stevens <michael.stevens@dianomi.com
> <mailto:michael.stevens@dianomi.com> >
> To: embperl@perl.apache.org <mailto:embperl@perl.apache.org>
> Cc: Michael Smith <michael.smith@dianomi.com
> <mailto:michael.smith@dianomi.com> >,
> cabell.demarcellus@dianomi.com
> <mailto:cabell.demarcellus@dianomi.com>
> Date: 07/20/2010 10:12 AM
> Subject: @param seems to be shared between Execute calls
>
>
>
>
>
> ________________________________
>
>
>
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared
> between Execute
> calls in the same process. The following code is a test
> case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com <http://www.dianomi.com/>
>
> The information in this message and any attachment is
> intended for the
> addressee and is confidential and may be subject to
> legal privilege.
> Dianomi Ltd, Registered Office: One America Square,
> Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company
> Registration
> Number 4513809. VAT registration number: 809754988
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> embperl-unsubscribe@perl.apache.org
> <mailto:embperl-unsubscribe@perl.apache.org>
> For additional commands, e-mail:
> embperl-help@perl.apache.org <mailto:embperl-help@perl.apache.org>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
RE: @param seems to be shared between Execute calls [ In reply to ]
Hi Michael,

 

one way of figuring out if it was called through Execute is to use the caller funtction of Perl.

 

The other one you can try it to use sub_req:

 

sub_req

top

 

 

Method:

 

$component -> sub_req [read only]



 

Since:

 

2.0b6



True is this is not the outermost Embperl component, i.e. this component is called from within another component.

 

Gerald

 

 

 

From: Michael Smith [mailto:smithm@gmail.com]
Sent: Friday, July 23, 2010 12:25 AM
To: Gerald Richter - ECOS
Cc: embperl@perl.apache.org; Michael Stevens; cabell.demarcellus@dianomi.com; Michael Smith
Subject: Re: @param seems to be shared between Execute calls



 

Thanks Gerald,

 


That's good to know for the future.  Is there a way to know if the code has been called through Execute?  I am actually using the same code both directly and via Execute.


 


Michael

On Wed, Jul 21, 2010 at 10:19 AM, Gerald Richter - ECOS <gerald.richter@ecos.de> wrote:

Hi Michael,

 

@param is only intented to be used to pass parameters to Execute. Setting it directly might work or might not…

 

If you want to share data inside a request use

 

 $epreq -> {test} = 1 ;

 

The hash of $epreq is not used by Embperl itself, so you are free to use it and it exists exactly for the live time of one Apache request

 

Gerald

 

 

 

From: Michael Smith [mailto:smithm@gmail.com]
Sent: Wednesday, July 21, 2010 11:05 AM


To: embperl@perl.apache.org


Cc: Michael Stevens; cabell.demarcellus@dianomi.com; Michael Smith
Subject: Re: @param seems to be shared between Execute calls



 

My problem is slightly different - though possibly a manifestation of the same thing.  I find that param isn't cleaned up between requests.

 


I have two epl files:


 


set.epl:


[- $param[0]->{'test'} = 1 -]


 


get.epl


[+ Dumper(@param) +]



 


I find that the data from set.epl turns up when I make a subsequent request for get.epl (in practice it's a bit more random than that if one is running multiple processes, so I make a few requests for set.epl and then a few for get.epl)


 


This only seems to be relevant if I reference param in the epl file I am calling directly.  If I reference it in epl files which are loaded in by Execute, then they do appear to get cleaned up.


 


Michael


 


 

On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <ed_grimm@raytheon.com> wrote:

Note that, under Apache, the cleanup code happens at the end of each request - each of which could have dozens of Execute calls, between which it is very definitely NOT called.

I have not used Embperl much from within server scripts, but in my limited use there, I've never seen the cleanup code fire.  I suspect each script is considered 'a request' for the purposes of the cleanup code (well, as far as docs are concerned.  I don't know if the code actually fires on END.)

--
Ed Grimm
Identity Services

From:

Michael Stevens <michael.stevens@dianomi.com>

To:

embperl@perl.apache.org

Cc:

Michael Smith <michael.smith@dianomi.com>, cabell.demarcellus@dianomi.com

Date:

07/20/2010 10:12 AM

Subject:

@param seems to be shared between Execute calls

 





Hi.

We're seeing an odd bug where @param seems to be shared between Execute
calls in the same process. The following code is a test case for this:

#!/usr/bin/perl -w

use strict;
use Embperl;

my $output1;

my $input = '[- $param[0]->{hello} = 42; -]';

Embperl::Execute({
                inputfile => "blah",
                input => \$input,
                output => \$output1,
                });

my $output2;
my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';

Embperl::Execute({
                                 inputfile => "blah",
                                 input => \$input2,
                                 output => \$output2
                });

Which on my machine outputs:

$VAR1 = [.
          {
            'hello' => 42
          }
        ];

Surely this shouldn't happen?

--
Michael Stevens
Dianomi Ltd
18 Buckingham Gate
London SW1E 6LB

Tel: 020 7802 5530
Fax: 020 7630 7356
www.dianomi.com

The information in this message and any attachment is intended for the
addressee and is confidential and may be subject to legal privilege.
Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
EC3N 2SG. Registered in England and Wales with Company Registration
Number 4513809. VAT registration number: 809754988

---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org


 








 
Re: @param seems to be shared between Execute calls [ In reply to ]
Thank you Gerald and Andrew - that's most helpful and much appreciated

Michael

On Mon, Jul 26, 2010 at 9:06 AM, Gerald Richter - ECOS <
gerald.richter@ecos.de> wrote:

> Hi Michael,
>
>
>
> one way of figuring out if it was called through Execute is to use the
> caller funtction of Perl.
>
>
>
> The other one you can try it to use sub_req:
>
>
>
> sub_req
>
> top <http://www.ecos.de/embperl/pod/doc/Config.-page-4-.htm#top>
>
>
>
> [image: http://www.ecos.de/embperl/images/but.gif]
>
> Method:
>
>
>
> $component -> sub_req *[read only]*
>
> [image: http://www.ecos.de/embperl/images/transp.gif]
>
> [image: http://www.ecos.de/embperl/images/but.gif]
>
> Since:
>
>
>
> 2.0b6
>
> [image: http://www.ecos.de/embperl/images/transp.gif]
>
> True is this is not the outermost Embperl component, i.e. this component is
> called from within another component.
>
>
>
> Gerald
>
>
>
>
>
>
>
> *From:* Michael Smith [mailto:smithm@gmail.com]
> *Sent:* Friday, July 23, 2010 12:25 AM
> *To:* Gerald Richter - ECOS
> *Cc:* embperl@perl.apache.org; Michael Stevens;
> cabell.demarcellus@dianomi.com; Michael Smith
>
> *Subject:* Re: @param seems to be shared between Execute calls
>
>
>
> Thanks Gerald,
>
>
>
> That's good to know for the future. Is there a way to know if the code has
> been called through Execute? I am actually using the same code both
> directly and via Execute.
>
>
>
> Michael
>
> On Wed, Jul 21, 2010 at 10:19 AM, Gerald Richter - ECOS <
> gerald.richter@ecos.de> wrote:
>
> Hi Michael,
>
>
>
> @param is only intented to be used to pass parameters to Execute. Setting
> it directly might work or might not…
>
>
>
> If you want to share data inside a request use
>
>
>
> $epreq -> {test} = 1 ;
>
>
>
> The hash of $epreq is not used by Embperl itself, so you are free to use it
> and it exists exactly for the live time of one Apache request
>
>
>
> Gerald
>
>
>
>
>
>
>
> *From:* Michael Smith [mailto:smithm@gmail.com]
> *Sent:* Wednesday, July 21, 2010 11:05 AM
>
>
> *To:* embperl@perl.apache.org
>
> *Cc:* Michael Stevens; cabell.demarcellus@dianomi.com; Michael Smith
> *Subject:* Re: @param seems to be shared between Execute calls
>
>
>
> My problem is slightly different - though possibly a manifestation of the
> same thing. I find that param isn't cleaned up between requests.
>
>
>
> I have two epl files:
>
>
>
> set.epl:
>
> [- $param[0]->{'test'} = 1 -]
>
>
>
> get.epl
>
> [+ Dumper(@param) +]
>
>
>
> I find that the data from set.epl turns up when I make a subsequent request
> for get.epl (in practice it's a bit more random than that if one is running
> multiple processes, so I make a few requests for set.epl and then a few for
> get.epl)
>
>
>
> This only seems to be relevant if I reference param in the epl file I am
> calling directly. If I reference it in epl files which are loaded in by
> Execute, then they do appear to get cleaned up.
>
>
>
> Michael
>
>
>
>
>
> On Tue, Jul 20, 2010 at 10:20 PM, Ed Grimm <ed_grimm@raytheon.com> wrote:
>
> Note that, under Apache, the cleanup code happens at the end of each
> request - each of which could have dozens of Execute calls, between which it
> is very definitely NOT called.
>
> I have not used Embperl much from within server scripts, but in my limited
> use there, I've never seen the cleanup code fire. I suspect each script is
> considered 'a request' for the purposes of the cleanup code (well, as far as
> docs are concerned. I don't know if the code actually fires on END.)
>
> --
> Ed Grimm
> Identity Services
>
> From:
>
> Michael Stevens <michael.stevens@dianomi.com>
>
> To:
>
> embperl@perl.apache.org
>
> Cc:
>
> Michael Smith <michael.smith@dianomi.com>, cabell.demarcellus@dianomi.com
>
> Date:
>
> 07/20/2010 10:12 AM
>
> Subject:
>
> @param seems to be shared between Execute calls
>
>
> ------------------------------
>
>
>
>
> Hi.
>
> We're seeing an odd bug where @param seems to be shared between Execute
> calls in the same process. The following code is a test case for this:
>
> #!/usr/bin/perl -w
>
> use strict;
> use Embperl;
>
> my $output1;
>
> my $input = '[- $param[0]->{hello} = 42; -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input,
> output => \$output1,
> });
>
> my $output2;
> my $input2 = '[- use Data::Dumper; print Dumper(\@param); -]';
>
> Embperl::Execute({
> inputfile => "blah",
> input => \$input2,
> output => \$output2
> });
>
> Which on my machine outputs:
>
> $VAR1 = [
> {
> 'hello' => 42
> }
> ];
>
> Surely this shouldn't happen?
>
> --
> Michael Stevens
> Dianomi Ltd
> 18 Buckingham Gate
> London SW1E 6LB
>
> Tel: 020 7802 5530
> Fax: 020 7630 7356
> www.dianomi.com
>
> The information in this message and any attachment is intended for the
> addressee and is confidential and may be subject to legal privilege.
> Dianomi Ltd, Registered Office: One America Square, Crosswall, London.
> EC3N 2SG. Registered in England and Wales with Company Registration
> Number 4513809. VAT registration number: 809754988
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org
>
>
>
>
>