*PIPER在Perl中意味着什么?

2 perl filehandle typeglob

我需要一些帮助来理解以下Perl代码段.我有以下两个问题.

1.当地*PIPER意味着什么?即使我在local *语法对我来说之前已经完成了一些Perl编程.它是指针吗?

2.目的是什么?

curl http://www.somesite.net/cgi-bin/updateuser.cgi? -d "userid=$userid&password=$password\" -s |"; ?
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

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;
Run Code Online (Sandbox Code Playgroud)

Chr*_*utz 10

1)" *PIPER"是typeglob.它是" $PIPER"," @PIPER"和" %PIPER"(我然后是一些)一体化.他们声明*PIPER您拥有的代码段的所有名称.

2)那是一个shell命令.它以a结尾|,表示正在运行该命令,并且它的输出作为文件句柄的输入被输入PIPER.然后程序逐行读取while(<PIPER>),但你已经知道了.

我不太了解curl,但我知道这是一个在互联网上做事的命令行程序.只是随机刺,您的代码似乎正在访问网站的CGI脚本并向其发送一些信息.


bri*_*foy 6

正如其他人所说,*PIPER是一个typeglob,因此您可以动态范围PIPER文件句柄.那是古老的Perl.改为使用词法文件句柄:

sub foo {
    my $http_query = "...";

    open my($piper), $http_query or die "sorry";

    while()
        {
        $rets = $_;
        }

    return $rets;
    }

您不需要执行任何操作即可向服务器发送POST请求.您可以使用LWP在Perl中完全执行此操作.