[Http-webtest-commits] CVS: HTTP-WebTest/lib/HTTP/WebTest Parser.pm,1.8,1.9
Brought to you by:
m_ilya,
richardanderson
From: Ilya M. <m_...@us...> - 2002-05-15 19:25:37
|
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; |