Perl中的“ <<”,“-”和在php中的实现是什么意思?

时间:2018-09-04 07:32:05

标签: php perl

我正在将一些Perl代码转换为PHP。
但是,我对Perl不太了解,因此我必须用粗略的含义编写代码。

而且,我不明白下面的Perl代码是什么意思...

$req2->content(<<"POST_DATA")--$boundary的含义是什么?
我已经搜索了Perl documentation,但是很难找到。

PHP代码:

...
$boundary= 'Nobody-has-the-intention-to-erect-a-wall'; 

$req2 = curl_init($search_url); 
curl_setopt($req2, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($req2, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($req2, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($req2, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($req2, CURLOPT_COOKIE, $cookie); 
curl_setopt($req2, CURLOPT_HTTPHEADER, array( 
'Content-Type: multipart/form-data;boundary='.$boundary, 
'Content-Length: ' . strlen($data_string)) 
); 
$result= curl_exec($req2); 
...

Perl代码:

...
my $boundary= 'Nobody-has-the-intention-to-erect-a-wall';
$req2->content_type('multipart/form-data;boundary='.$boundary);
$req2->header("Cookie"=>"access_token_cookie=$access_token_cookie; csrf_access_token=$csrf_access_token");

$req2->content(<<"POST_DATA"); #what means this?

--$boundary
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain

$num_result
--$boundary
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg

$image
--$boundary--
POST_DATA

my $res = $ua->request($req2);
...

2 个答案:

答案 0 :(得分:4)

$req2->content(<<"POST_DATA"); #what means this?

<<"POST_DATA"开始一个HERE document,它实际上是一个长字符串。双引号""告诉Perl做string interpolation。这意味着字符串中的变量将被其内容替换。当解析器遇到定界符时,该字符串结束,在这种情况下为字符串POST_DATA

您所指的--不是运算符。在字符串内部使用。该程序通过HTTP发送multipart/formdata表单。如果您对技术细节感兴趣,请查看RFC 7578。本质上,请求正文的每个部分代表一个文档。它可以是多行,并且包含很多信息。边界可以在HTTP标头中设置,通常是一个长而随机的字符串,不会出现在任何正文部分中。有关详细说明,请参见this answer

答案 1 :(得分:3)

与PHP实际上没什么不同。

  • << Heredoc,也出现在PHP中,只是略有不同:

    echo (<<<"POST_DATA"
    First line
    Second line
    POST_DATA
    );
    
  • --变量减少,如<?php $a=2; echo --$a;

注意:

当然,在Heredoc --中只是文本。


建议:

如果您不完全了解Perl,请尝试运行它(这不是邪恶的代码)。

my $boundary = 'Nobody-has-the-intention-to-erect-a-wall';
print(<<"POST_DATA");

--$boundary
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain

$num_result
--$boundary
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg

$image
--$boundary--
POST_DATA

将产生产量:

 
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain


--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg


--Nobody-has-the-intention-to-erect-a-wall--