Update of /cvsroot/http-webtest/HTTP-WebTest/lib/HTTP/WebTest
In directory usw-pr-cvs1:/tmp/cvs-serv7141/lib/HTTP/WebTest
Modified Files:
Parser.pm
Log Message:
Use eval_in_playground(); change rules again - let variable expansion
in double quoted strings
Index: Parser.pm
===================================================================
RCS file: /cvsroot/http-webtest/HTTP-WebTest/lib/HTTP/WebTest/Parser.pm,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** Parser.pm 12 May 2002 13:35:35 -0000 1.8
--- Parser.pm 15 May 2002 19:25:34 -0000 1.9
***************
*** 27,30 ****
--- 27,32 ----
use Text::Balanced qw(extract_codeblock extract_delimited);
+ use HTTP::WebTest::Utils;
+
use vars qw(@ERRORS);
***************
*** 98,117 ****
qscalar: <rulevar: $extracted >
qscalar: { $extracted = extract_delimited($text) }
{
! my $delim = substr $extracted, 0, 1;
! # let Perl remove quote chars and handle special
! # sequences like \n but don't treat $ and @ as
! # special. Note \\\\ in patterns. It is actually
! # just *one* backslash. Four chars are because of
! # double quoting (one inside parser grammar
! # definition, second inside regexp body)
! if($delim eq '"') {
! $extracted =~ s/(^|[^\\\\])((?:\\\\\\\\)*)(\\\\)(\$|\@)/$1$2$3$3$4/g;
! $extracted =~ s/(\$|\@)/\\\\$1/g;
}
! my $string = eval "$extracted";
! $string;
}
uscalar: <rulevar: $word_re = qr/ (?: [^=)\s] | [^)\s] (?!>) ) /x>
--- 100,122 ----
qscalar: <rulevar: $extracted >
+ qscalar: <rulevar: $exception >
+
qscalar: { $extracted = extract_delimited($text) }
{
! my $delim = substr $extracted, 0, 1;
! my $ret;
! if($delim eq "'" or $extracted !~ /[\$\@\%]/) {
! # variable interpolation impossible - just
! # evalute string to get rid of escape chars
! $ret = HTTP::WebTest::Utils::eval_in_playground($extracted);
! } else {
! # variable interpolation possible - evaluate as
! # subroutine which will be used as callback
! $ret = HTTP::WebTest::Utils::eval_in_playground("sub { $extracted }");
! $exception = $@;
}
! $ret;
}
+ | <error?: Eval error\n$exception\nnear @{[$text =~ /(.*)/]}>
uscalar: <rulevar: $word_re = qr/ (?: [^=)\s] | [^)\s] (?!>) ) /x>
***************
*** 129,134 ****
<commit>
{
! my $sub = eval "package HTTP::WebTest::PlayGround;\n" .
! "sub { $extracted }\n";
$exception = $@;
$sub;
--- 134,138 ----
<commit>
{
! my $sub = HTTP::WebTest::Utils::eval_in_playground("sub { $extracted }");
$exception = $@;
$sub;
|