Thanks Dirk,

Adding a “do {}” block to a substr call does work.

However the it’s seems to only be for substr.
We tested this code:

#!/opt/perl520/bin/perl

use Embperl;

my $template = <<'.';
<br/>
substr<br/>
<br/>

[- $str = substr('ABCD',2,2) -]
<p>[+ $str +]</p>
[- $str = 'ABCD' -]
<p>[+ substr($str,2,2) +]</p>
<p>[+ do {substr('ABCD',2,2)} +]</p>

<br/>
length - length of 'ABCD'<br/>
<br/>

<p>[+ length($str) +]</p>
[- $l = length($str) -]
<p>[+ $l +]</p>

<br/>
index - where's 'B' in 'ABCD'<br/>
<br/>

<p>[+ index($str,'B') +]</p>
[- $l = index($str,'B') -]
<p>[+ $l +]</p>

<br/>
rindex - where's 'B' in 'ABCD'<br/>
<br/>

<p>[+ rindex($str,'B') +]</p>
[- $l = rindex($str,'B') -]
<p>[+ $l +]</p>

<br/>
ord - the numeric value of first character of 'ABCD'<br/>
<br/>

<p>[+ ord($str) +]</p>
[- $l = ord($str) -]
<p>[+ $l +]</p>
.

my $body;

Embperl::Execute({input  => \$template, param => '', output => \$body});

print "$body\n";

1;

------------------------And the results are:

<br/>
substr<br/>
<br/>

<p>CD</p>
<p></p>
<p>CD</p>

<br/>
length - length of 'ABCD'<br/>
<br/>

<p>4</p>
<p>4</p>

<br/>
index - where's 'B' in 'ABCD'<br/>
<br/>

<p>1</p>
<p>1</p>

<br/>
rindex - where's 'B' in 'ABCD'<br/>
<br/>

<p>1</p>
<p>1</p>

<br/>
ord - the numeric value of first character of 'ABCD'<br/>
<br/>

<p>65</p>
<p>65</p>

It appears the issue isn’t about just function calls. Just substr for some 
reason.

Best Regards

Matthew Kaiser – IT Department
630-515-6138

HelpDesk:
(630)-515-7361 – Illinois
(623)-572-3388 - Arizona

From: Dirk Melchers <dirk.melch...@nureg.de>
Sent: Tuesday, March 16, 2021 2:37 AM
To: Kaiser, Matthew <mkai...@midwestern.edu>
Cc: embperl@perl.apache.org
Subject: Re: substr no longer works in [+ tags +]?

CAUTION: This email originated from outside of MWU
Hi,

let me quote a mail from myself from 2019, regarding problems with %udat, which 
also hits you now:

Hi,

very late answer: we stumbled over the same problem now...

With newer perl versions there seems to be a very ugly bug when [+   +] only 
contains a function call (which I believe access to a TIE (mdat,udat) is also).
Even [+ substr($string,0,4) +] does not work!

Look at this code example:

[- $udat{'jo'}=23 -]

substr:[+ substr("hallo",0,3) +]<br>
fdat:[+ $fdat{'jo'} +]<br>
udat:[+ $udat{'jo'} +]<br>
<br>
substr:[+ substr("hallo",0,3).'' +]<br>
fdat:[+ $fdat{'jo'}.'' +]<br>
udat:[+ $udat{'jo'}.'' +]<br>

In the first block, only fdat will be displayed, in the second one all three 
values.

So make sure, that there is not a single function call in the [+ +] block!


Fun fact: the current debian patches simply changed the tests and added  .''  
or +0 to the tests to "fix" the problem...

Our fix: wrap everything in a "do {}" block:  [+ do { $udat{foo} } +]


With best regards,

Dirk Melchers
/// IT/Software-Development ///

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<http://www.nureg.de>
Nürnberg HRB 22653 | USt.ID DE 814 685 653
Geschäftsführer: Michael Schmidt, Stefan Boas


Am 15.03.2021 um 21:48 schrieb Kaiser, Matthew 
<mkai...@midwestern.edu<mailto:mkai...@midwestern.edu>>:

Hello all,

After being a lurker for years, I have a question for y’all.

We just tested a server running Perl 5.30 with Embperl 2.5.0 and we’re getting 
a weird behavior.

The embperl code:
[+ substr(‘ABCD’,2,2) +]
no longer prints anything from within the .epl files.

The phrase:
[- $str = substr(‘ABCD’,2,2) -]
[+ $str +]
Works just fine.

Any idea on what’s causing this change in behavior?

Any ideas?


With My Best Regards

<image001.png>

Matthew E Kaiser
Systems Developer
IT Department
Midwestern University - Downer's Grove Campus
(630)-515-6138
mka...@midwestern.edu<mailto:mka...@midwestern.edu>

HelpDesk:
(630)-515-7361 – Illinois
(623)-572-3388 - Arizona

The information contained in this e-mail and any accompanying documents is 
intended for the sole use of the recipient to whom it is addressed, and may 
contain information that is privileged, confidential, proprietary to sender, 
and prohibited from disclosure under applicable law. If you are not the 
intended recipient, or authorized to receive this on behalf of the recipient, 
you are hereby notified that any review, use, disclosure, copying, or 
distribution is prohibited. If you are not the intended recipient(s) or have 
received this communication in error, please contact the sender by e-mail, 
delete it from your computer, and destroy all copies of the original message. 
Thank you.



[https://online.midwestern.edu/images/MaskUp.gif]
.. ..

Reply via email to