【发布时间】:2013-12-14 04:43:18
【问题描述】:
只是想知道我的代码可能做错了什么以得到错误。我不断得到 错误代码是:
“在 C:\begperl/final.pl 第 136,138,167,169 行,第 2006 行 (#1) 的哈希元素中使用未初始化的值 $value”
我去打印我的数组,但它们都打印了,所以我对为什么我的变量为空感到有点茫然。谢谢!
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
#opens txt file: read mode
open MYFILE, '<', 'source_file.txt' or die $!;
#opens output txt file: write mode
open OUT, '>', 'Summary_Report.txt' or die $!;
my @header;
my $i = 0;
my $packet_size = 0;
my $start_time = undef;
my $end_time;
my @source_ip;
my @source_port;
my $src_port;
my @src_port;
my @dest_ip;
my @dest_port;
my $destination_port;
my @destination_port;
while (<MYFILE>) {
chomp; #break new line
#separate pieces of information from TCPDUMP into list
@header = split (/\s+/, $_);
if (/^\d+:\d+/) {
##############################T I M E###################################
#defining first 'line & time' as 'special'
if (/^22:28/ && !defined($start_time)) {
$start_time = $header[0];
#print "$start_time\n"; check
}
if (/22:28/) {
$end_time = $header[0];
}
############################S O U R C E##################################
#categorizing each section of ip's from source
@source_ip = split ('\.', $header[2]);
#joining ip's together
$source_ip[$i] = join '.', @source_ip[0 .. 3];
#print $source_ip[$i];
@source_port = split (':', $source_ip[4]);
$src_port[$i] = $source_port[0];
#########################D E S T I N A T I O N###########################
#categorizing each section of ip's from destination
@dest_ip = split ('\.', $header[4]);
#joining ip's together
$dest_ip[$i] = join '.', @dest_ip[0 .. 3];
#print $dest_ip[$i];
@dest_port = split (':', $dest_ip[4]);
$destination_port[$i] = $dest_port[0];
#print $destination_port[$i];
#############################L E N G T H#################################
#-1 represents length
#transferring $header[-1] into 'total length'
$packet_size += $header[-1];
#print $packet_size;
$i++;
}
}
my @total_timesplit;
my @s_timesplit = split (':', $start_time);
#print @s_timesplit;
my @e_timesplit = split (':', $end_time);
#print @e_timesplit;
for $i (0 .. 2) {
$total_timesplit[$i] = $e_timesplit[$i] - $s_timesplit[$i];
#print @total_timesplit;
}
#Yields average packet size
my $avg_length = $packet_size/$i;
#print $avg_length;
close MYFILE;
#########################D A T A S E C T I O N###########################
open MYFILE, '<', 'source_file.txt' or die $!;
my $user = 0;
my $pass = 0;
#separating loop to reset values#
while (<MYFILE>) {
#finds all instances of USER
$user++ if /USER/i;
#print $user;
#finds all instances of PASS
$pass++ if /PASS/i;
#print $pass;
}
##############################SOURCEIPHASH##############################
my %seenip_source;
my @uniqueip_source;
my $sourceips_unique;
foreach my $value (@source_ip) {
if (! $seenip_source{$value}) {
push @uniqueip_source, $value;
$seenip_source{$value} = 1;
}
}
$sourceips_unique = @uniqueip_source;
#########################SOURCEPORTHASH#################################
my %seenport_source;
my @uniqueport_source;
my $sourceports_unique;
foreach my $value (@source_port) {
if (! $seenport_source{$value}) {
push @uniqueport_source, $value;
$seenport_source{$value} = 1;
}
}
$sourceports_unique = @uniqueport_source;
##########################DESTINATIONIPHASH#############################
my %seenip_dest;
my @uniqueip_dest;
my $destips_unique;
foreach my $value (@dest_ip) {
if (! $seenip_dest{$value}) {
push @uniqueip_dest, $value;
$seenip_dest{$value} = 1;
}
}
$destips_unique = @uniqueip_dest;
#########################DESTINATIONPORTSHASH###########################
my %seenport_dest;
my @uniqueport_dest;
my $destports_unique;
foreach my $value (@dest_port) {
if (! $seenport_dest{$value}) {
push @uniqueport_dest, $value;
$seenport_dest{$value} = 1;
}
}
$destports_unique = @uniqueport_dest;
#########################################################################
【问题讨论】:
-
请只发布代码的相关部分。
-
请 (a) 包括准确的错误信息,以及行号; (b) 包括样本数据; (c) 研究如何创建 SSCCE (Short, Self-Contained, Correct Example),以便尽可能少地研究无关代码。不过,最重要的是代码、数据和错误消息要同步。
-
刚刚发布。其他成员告诉我将我的整个代码复制并粘贴到这里,现在你告诉我不要这样做。我赢不了。
-
您至少使用了 4 次
$value用于不同的目的(端口、IP 地址,也曾经取消使用过)。行号应该告诉您运行时声称哪个版本的$value未初始化。我敢打赌,您正在迭代的数组之一中有一个未定义的值。但这是一个猜测。 -
如果其他成员让你跳崖,你会吗?发布尽可能少的代码来证明您的问题。