只是找不到这个语法(<$SOCKET>)的作用,虽然我猜它是变量中对象的某种默认评估或行为.
我试图测试我的Apache服务器(在安装mod_evasive模块之后)与这个假定的DoS探测器(这进入100次循环),但它总是返回响应400 Bad Request.试图对代码进行decypher,我已经陷入了下面的注释行.
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);
Run Code Online (Sandbox Code Playgroud)
然后我的主要兴趣是能够进行测试,所以我首先需要知道为什么我得到400错误代码来修复它.
而且,BTW,为了好奇,我想了解<$SOCKET>语法含义,因为我无法在任何地方找到它.
该< >(也被称为"钻石经营者")是一个速记readline.括号内的东西提供输入行.这可能是文件句柄,管道,套接字或其他类似的东西.在您的情况下,它$SOCKET是存储您创建的套接字的变量.
调用<$SOCKET>从该输入读取下一行.
虽然有一点技巧.在其他一些情况下,这< >是一个简写glob.如果角度内的东西看起来像一个glob模式,则< >返回与该模式匹配的文件列表:
my @files = <*.txt>;
Run Code Online (Sandbox Code Playgroud)
这可能是你看到的一些旧语法; 我更喜欢拼出来:
my @files = glob( '*.txt' );
Run Code Online (Sandbox Code Playgroud)