我有一個Perl程序,它解析外部程序中的數據並將其保存到數組中。但是,有些數據未保存,稍後嘗試恢復時會返回空白。Perl數組不保存所有變量
下面的代碼解析的數據,這些數據來自通過爲@packetData
:
if(@packetData[0] ne ""){
if(!$detectedClient{"@packetData[0]"}) {
my $rawSignal = average(@packetData[2]);
my $distance = 10**((27.55-(20*logten(2437))+abs($rawSignal))/20);
my @newClient = ($rawSignal, # Signal (dBm)
1, # Count
@packetData[0], # Source MAC
time(), # Last seen
$distance); # Distance (m)
$detectedClient{"@packetData[0]"} = [@newClient];
$uniqueClient++;
print "++ New probe request from @packetData[0] [$rawSignal dBm, $distance m]\n";
} else {
$detectedClient{"@packetData[0]"}[1]++;
$detectedClient{"@packetData[0]"}[3] = time();
}
}
的print
聲明顯示信號和距離的罰款,但試圖從detectedClient
陣列顯示它給出了下面的代碼給出了一個空白處:
for $key2 (keys %detectedClient) {
#Signal, Count, MAC, Time
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($detectedClient{$key2}[3]);
my $lastSeen = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
print STDOUT sprintf("!! %-20s %10s %-20s\n", $detectedClient{$key2}[2], $detectedClient{$key2}[1], $lastSeen, $detectedClient{$key2}[0], $detectedClient{$key2}[4]);
}
任何想法爲什麼會發生這種情況?
總是使用'use strict;使用警告qw(全部);'! – ikegami
我有兩個在腳本的頂部,但爲了清晰而忽略它們(以及其餘的腳本) – CyberJacob
@CyberJacob:如果你有'使用警告',那麼你忽略了'Scalar value @packetData [ 0]更好地寫爲$ packetData [0]'。你爲什麼這樣做? – Borodin