簡體   English   中英

* PIPER在Perl中意味着什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM