Perl语法<$ VARIABLE>是什么意思?

时间:2018-12-29 16:08:21

标签: perl sockets

尽管我猜想这是变量内对象的某种默认评估或行为,但无法找到此语法(<$SOCKET>)的作用。

我试图使用此可能是DoS探针(在100次循环内)测试Apache服务器(安装了 mod_evasive 模块之后),但它始终返回一个响应 400错误的请求。尝试解密代码,我陷入了下面的注释行。

use IO::Socket;
use strict;

my($response);
my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                  PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET / HTTP/1.1\n\n";

$response = <$SOCKET>; ## What are those < > signs???

print $response;
close($SOCKET);

然后我的主要兴趣是能够进行测试,所以我首先需要知道为什么我得到400错误代码来对其进行修复。

不过,顺便说一句,顺便说一句,出于好奇,我想了解<$SOCKET>的语法含义,因为在任何地方都找不到它的解释。

2 个答案:

答案 0 :(得分:6)

< >(也称为“钻石操作员”)是readline的简写。括号内的东西提供了输入行。那可能是文​​件句柄,管道,套接字或其他类似的东西。在您的情况下,变量$SOCKET存储了您创建的套接字。

<$SOCKET>的调用从该输入中读取下一行。

虽然有一些技巧。在其他一些情况下,< >glob的简写。如果角度内的东西看起来像是球形模式,则< >返回与该模式匹配的文件列表:

 my @files = <*.txt>;

您可能会看到一些旧语法;我更喜欢把它拼出来:

 my @files = glob( '*.txt' );

答案 1 :(得分:3)

  • <>的意思是readline(ARGV)
  • <IDENTIFIER>的意思是readline(IDENTIFIER)
  • <$IDENTIFIER>的意思是readline($IDENTIFIER)
  • <...>(其他任何意思)表示glob(qq<...>)

您使用的是第三种语法,因此<$SOCKET>的意思是readline($SOCKET)。您在标量上下文中使用它,因此它从$SOCKET中读取一行。