[英]What does *PIPER mean in Perl?
我需要一些幫助來理解以下Perl代碼段。 我有以下兩個問題。
1.本地*PIPER
是什么意思? 即使我在local *
語法之前完成了一些Perl編程,對我來說也是新的。 它是指針嗎?
2.目的是什么?
curl http://www.somesite.net/cgi-bin/updateuser.cgi? -d "userid=$userid&password=$password\" -s |"; ?
謝謝 :)
local *PIPER;
$http_query = "curl http://www.somesite.net/cgi-bin/updateuser.cgi? -d \"userid=$userid&password=$password\" -s |";
open(PIPER,$http_query) or die "sorry";
while(<PIPER>)
{
$rets = $_;
}
close(PIPER);
return $rets;
1)“ *PIPER
”是一個typeglob。 它是“ $PIPER
”,“ @PIPER
”和“ %PIPER
”(我然后是一些)。 他們聲明所有*PIPER
名稱是您所擁有的代碼段的本地名稱。
2)那是一個shell命令。 它以|
結尾 這意味着正在運行該命令,並且它的輸出作為文件句柄PIPER
的輸入進行管道輸入。 然后程序用while(<PIPER>)
,但你已經知道了。
我對curl
,但我知道這是一個在互聯網上做事的命令行程序。 只是隨機刺,您的代碼似乎正在訪問網站的CGI腳本並向其發送一些信息。
正如其他人所說, *PIPER
是一個typeglob,因此您可以動態調整PIPER文件句柄的范圍。 那是古老的Perl。 改為使用詞法文件句柄:
sub foo { my $http_query = "..."; open my($piper), $http_query or die "sorry"; while() { $rets = $_; } return $rets; }
您不需要執行任何操作即可向服務器發送POST請求。 您可以使用LWP在Perl中完全執行此操作。
local *PIPER;
聲明PIPER
文件句柄是本地的。 由於文件句柄沒有自己的類型符號,因此需要使用typeglobs捕獲它們才能聲明為本地。
curl
類似於wget
; 它用於傳輸URL。 有關詳細信息,請參閱man curl
,但-d
開關(數據)在POST操作中將以下字符串作為數據傳遞, -s
開關(靜默)禁止錯誤輸出和進度表。
2)curl的實際調用將文本“userid = $ userid&password = $ password \\”的HTTP POST請求發送到http://www.somesite.net/cgi-bin/updateuser.cgi ? 並從服務器(到管道)輸出響應。 -s標志剝離除服務器之外的任何內容的輸出(例如錯誤消息或進度表)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.