【问题标题】:What does *PIPER mean in Perl?*PIPER 在 Perl 中是什么意思?
【发布时间】:2009-02-16 07:04:29
【问题描述】:

我需要一些帮助来理解以下 Perl 代码 sn-p。我有以下两个问题。

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;

【问题讨论】:

  • 我想补充一点,恕我直言,这段代码写得相当糟糕。 Curl 可以作为库使用,没有理由求助于使用外部命令。
  • CPAN.pm 默认不使用 curl 吗?或者至少在某些情况下?我自己从来没有使用过 curl,但是我看到它在使用 CPAN 模块时弹出。
  • 不,CPAN.pm 默认不使用 curl。它首先尝试纯 Perl,但如果没有安装 libwww-perl,它需要回退到其他东西。

标签: perl filehandle typeglob


【解决方案1】:

1) "*PIPER" 是一个类型团。它是“$PIPER”、“@PIPER”和“%PIPER”(然后是一些)合而为一。他们将所有 *PIPER 名称声明为您拥有的代码 sn-p 的本地名称。

2) 这是一个 shell 命令。它以| 结尾,这意味着该命令正在运行,并且它的输出作为文件句柄PIPER 的输入被输入。然后程序会使用while(&lt;PIPER&gt;) 逐行读取此内容,但您已经知道了。

我对@9​​87654330@ 了解不多,但我知道它是一个用于在互联网上做事的命令行程序。只是随机刺伤,您的代码似乎正在访问网站的 CG​​I 脚本并向其发送一些信息。

【讨论】:

  • 有关类型球的文档,请查看perl.com/doc/manual/html/pod/perldata.html
  • 谢谢克里斯,你的解释真的很有帮助:)
  • 在 'use FileHandle;' 的前几天或相关模块,这是为自己提供本地“文件句柄”的标准方式。现在,您通常不需要这种符号 - 但 STDERR、STDOUT、STDIN 是那个过去时代的遗物。
【解决方案2】:

正如其他人所指出的,*PIPER 是一个类型团,因此您可以动态地确定 PIPER 文件句柄的范围。不过那是古老的 Perl。改用词法文件句柄:

子富{ 我的 $http_query = "..."; 打开我的($piper),$http_query 或者死“对不起”; 尽管() { $rets = $_; } 返回$rets; }

不过,您无需执行任何这些操作即可将 POST 请求发送到服务器。您可以在 Perl 中使用 LWP 完全做到这一点。

【讨论】:

    【解决方案3】:

    local *PIPER;PIPER 文件句柄声明为本地文件句柄。由于文件句柄没有自己的类型符号,它们需要被 typeglobs 捕获才能声明为本地的。

    curl 类似于wget;它用于传输 URL。有关更多详细信息,请参阅 man curl,但 -d 开关(数据)将以下字符串作为数据传递给 POST 操作,-s 开关(静默)抑制错误输出和进度表。

    【讨论】:

      【解决方案4】:

      2) 这个 curl 的实际调用会发送一个带有文本的 HTTP POST 请求 \"userid=$userid&password=$password\" 到 http://www.somesite.net/cgi-bin/updateuser.cgi? 并输出来自服务器的响应(到管道)。 -s 标志会从任何内容中删除输出,除了来自服务器的内容(例如错误消息或进度表)。

      【讨论】:

        猜你喜欢
        • 2018-03-05
        • 2010-12-28
        • 2023-03-25
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 2011-09-15
        • 2011-01-22
        • 1970-01-01
        相关资源
        最近更新 更多