如何在Perl中传递名称 - 值对作为参数

kee*_*ple 0 string perl escaping

我认为这是非常基本的问题,但我没有理解.

我正在使用LWP :: UserAgent包在perl脚本中构建一个post请求.代码如下:

my $urlStr = "http://localhost/testproj/AServlet";
my $postDataStr = "{name => \'ankur434\'}";
my $response = $ua->post($urlStr, $postDataStr);
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用并给出以下错误 -

<Dec 6, 2010 3:15:54 PM IST> <Error> <HTTP> <BEA-101215> <Malformed Request "/testproj/AServlet". Request parsing failed, Code: -1>
Run Code Online (Sandbox Code Playgroud)

但是当我直接将postDataStr的值传递给post方法时,它的效果非常好,如下所示:

my $response = $ua->post($urlStr, {name => 'ankur434'});
Run Code Online (Sandbox Code Playgroud)

我尝试了一些选项,例如转义{使用反斜杠(\ {)但没有任何效果......

谁能提出建议?谢谢!

rei*_*ost 6

{name => 'ankur434'}
Run Code Online (Sandbox Code Playgroud)

是一个哈希引用.

"{name => \'ankur434\'}"
Run Code Online (Sandbox Code Playgroud)

是,如您的变量名称所示,是一个字符串.Perl不会自动将后者转换为前者.您似乎认为在Perl中,只能将字符串分配给变量或传递给子例程.不是这种情况.只是用

my $urlStr = "http://localhost/testproj/AServlet";
my $postData = {name => 'ankur434'};
my $response = $ua->post($urlStr, $postData);
Run Code Online (Sandbox Code Playgroud)