Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 文件::尾部::选择平均值?_Perl_Filehandle - Fatal编程技术网

Perl 文件::尾部::选择平均值?

Perl 文件::尾部::选择平均值?,perl,filehandle,Perl,Filehandle,这是伟大的工作,但有一部分我不明白: print $_->{"input"}." (".localtime(time).") ".$_-> read; 它打印什么?如果我将其修改为: print "$_"; 有一些错误。为什么? #!/usr/local/bin/perl use File::Tail; chdir( "/var/log/snort"); foreach my $fol(glob "*.*.*.*") { print "Opening $fol\

这是伟大的工作,但有一部分我不明白:

print $_->{"input"}." (".localtime(time).") ".$_-> read;
它打印什么?如果我将其修改为:

print "$_";
有一些错误。为什么?

#!/usr/local/bin/perl

use File::Tail;
chdir( "/var/log/snort");
foreach my $fol(glob "*.*.*.*")
{
        print "Opening $fol\n";
        chdir("/var/log/snort/$fol");
        foreach my $subfile(glob "*:*")
        {
                print "opening $subfile\n";
                push(@files,File::Tail->new(name=>"$subfile",debug=>$debug));
        }
        while (1)
        {
                ($nfound,$timeleft,@pending)= File::Tail::select(undef,undef,undef,$timeout,@files);
                unless ($nfound)
                {
                   # timeout - do something else here, if you need to
                }
                else
                {
                        foreach (@pending)
                        {
                                print $_->{"input"}." (".localtime(time).") ".$_-> read;
                        }
                }
        }
}
示例结果:

TCP:34628-80 (Wed Mar 30 01:49:57 2011) 03/30-01:49:50.607858 119.40.116.196:80 -> 192.168.242.133:34628
TCP:34628-80 (Wed Mar 30 01:49:57 2011) TCP TTL:128 TOS:0x0 ID:34869 IpLen:20 DgmLen:40
TCP:34629-80 (Wed Mar 30 01:49:57 2011) 03/30-01:49:51.309716 119.40.116.196:80 -> 192.168.242.133:34629
UDP:41415-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.220999 192.168.242.2:53 -> 192.168.242.133:41415
UDP:44705-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.427011 192.168.242.2:53 -> 192.168.242.133:44705
UDP:50539-53 (Wed Mar 30 01:49:57 2011) 03/30-01:49:47.213455 192.168.242.2:53 -> 192.168.242.133:50539
TCP:34628-80 (Wed Mar 30 01:49:57 2011) ***AP**F Seq: 0x2F3E700A  Ack: 0x2359814F  Win: 0xFAF0  TcpLen: 20
TCP:34629-80 (Wed Mar 30 01:49:57 2011) TCP TTL:128 TOS:0x0 ID:34871 IpLen:20 DgmLen:40
UDP:41415-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34859 IpLen:20 DgmLen:65
UDP:44705-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34861 IpLen:20 DgmLen:153
UDP:50539-53 (Wed Mar 30 01:49:57 2011) UDP TTL:128 TOS:0x0 ID:34857 IpLen:20 DgmLen:179
TCP:34628-80 (Wed Mar 30 01:49:57 2011) =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
TCP:34629-80 (Wed Mar 30 01:49:57 2011) ***AP**F Seq: 0x9D70418  Ack: 0x248089DB  Win: 0xFAF0  TcpLen: 20
UDP:41415-53 (Wed Mar 30 01:49:57 2011) Len: 37
UDP:44705-53 (Wed Mar 30 01:49:57 2011) Len: 125
UDP:50539-53 (Wed Mar 30 01:49:57 2011) Len: 151
TCP:34628-80 (Wed Mar 30 01:49:57 2011) 
TCP:34629-80 (Wed Mar 30 01:49:57 2011) =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

File::Tail::select
返回找到的文件句柄数、某种超时方式以及
File::Tail
对象列表。这些在代码中的
@pending
中。当您要打印内容时,您在
@pending
中循环遍历每个成员,而不显式地创建新变量,因此
@pending
的每个元素都会自动放入特殊的
$\ucode>变量中

首先打印
$\u->{“input”}
,这是某种“输入”(文档不清楚这是什么)、时区中的当前时间以及从文件中读取的字符串(
$\u>>读取

如果您只是尝试打印出
$\uuuu
您正在尝试打印出一个对象,这不会给您预期的结果(除非所述对象重载字符串化,而
File::Tail
不会)

我建议通读这本书


Edit:我浏览了一遍,发现
$\u->{“input”}
严重滥用了面向对象的Perl。这实际上是对象创建者的
name
参数的对象内部表示形式。您应该通过将
$\>{“input”}
更改为
$\->name
来正确访问它。我注意到,您的代码是这样编写的,这不是您的错,因为
File::Tail
文档使用的正是这种语法,但它不正确,应该更改。

哦,谢谢,如果我只想检索目标IP地址,该如何修改它呢?@T\y:您必须问另一个问题。这不是一个很容易在评论中回答的问题。