Author: torsten
Date: Thu Jul 28 12:25:53 2011
New Revision: 1151816
URL: http://svn.apache.org/viewvc?rev=1151816&view=rev
Log:
Allow for multiline Perl statements in the "#_if_" minilanguage in
map files like xs/maps/apache2_functions.map
Before this change one would have to write
#_if_ do { long perl expression; another perl expression }
After it can span over multiple lines:
#_if_ do { \
long perl expression; \
another perl expression; \
}
Modified:
perl/modperl/branches/httpd24/lib/ModPerl/MapUtil.pm
Modified: perl/modperl/branches/httpd24/lib/ModPerl/MapUtil.pm
URL:
http://svn.apache.org/viewvc/perl/modperl/branches/httpd24/lib/ModPerl/MapUtil.pm?rev=1151816&r1=1151815&r2=1151816&view=diff
==============================================================================
--- perl/modperl/branches/httpd24/lib/ModPerl/MapUtil.pm (original)
+++ perl/modperl/branches/httpd24/lib/ModPerl/MapUtil.pm Thu Jul 28 12:25:53
2011
@@ -103,15 +103,28 @@ sub readline {
# #_end_
if (/^\s*#\s*_(if|unless|els(?:e|if)|end)_(?:\s(.+))?/) {
my ($cmd, $param) = ($1, $2);
+ if (defined $param) {
+ while ($param=~s!\\$!!) {
+ my $l=<$fh>;
+ die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n"
+ unless defined $l;
+ chomp $l;
+ $param.=$l;
+ }
+ }
if ($cmd eq 'if') {
- unshift @condition, 0+!!eval $param;
+ unshift @condition,
+ 0+!!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+ die $@ if $@;
}
elsif ($cmd eq 'elsif') {
die "parse error ($ModPerl::MapUtil::MapFile line $.)".
" #_elsif_ without #_if_"
unless @condition;
if ($condition[0] == 0) {
- $condition[0]+=!!eval $param;
+ $condition[0]+=
+ !!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+ die $@ if $@;
} else {
$condition[0]++;
}
@@ -123,7 +136,9 @@ sub readline {
$condition[0]+=1;
}
elsif ($cmd eq 'unless') {
- unshift @condition, 0+!eval $param;
+ unshift @condition,
+ 0+!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
+ die $@ if $@;
}
elsif ($cmd eq 'end') {
shift @condition;
@@ -133,6 +148,15 @@ sub readline {
if (/^\s*#\s*_(eval)_(?:\s(.+))?/) {
my ($cmd, $param) = ($1, $2);
+ if (defined $param) {
+ while ($param=~s!\\$!!) {
+ my $l=<$fh>;
+ die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n"
+ unless defined $l;
+ chomp $l;
+ $param.=$l;
+ }
+ }
if ($cmd eq 'eval') {
eval "#line $. $ModPerl::MapUtil::MapFile\n".$param;
die $@ if $@;