[請益]新手請教一下

看板Perl作者 (東大)時間18年前 (2007/03/06 22:13), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/3 (看更多)
各位好啊,我是perl的超級新手,資歷一個月 我有個檔案(檔名為session)內容為 192.168.1.123 1088 43009 68.142.233.138 5061 WAN2 192.168.1.191 1984 61313 202.43.199.246 80 WAN1 192.168.1.192 1728 61313 207.46.110.81 1863 WAN2 192.168.1.211 50464 49377 202.39.48.85 161 WAN1 192.168.1.131 1857 45826 68.142.233.167 5061 WAN1 192.168.1.108 1377 39458 168.95.192.1 53 WAN2 192.168.1.133 1665 46146 207.46.108.89 1863 WAN1 192.168.1.93 1025 35266 168.95.192.1 53 WAN1 192.168.1.191 1154 60483 168.95.192.1 53 WAN1 192.168.1.194 2563 62660 65.54.195.188 80 WAN1 192.168.1.131 1860 45829 202.43.193.120 5061 WAN1 192.168.1.190 2500 61573 216.239.63.189 80 WAN2 192.168.1.194 2564 62661 210.65.0.40 80 WAN1 192.168.1.124 1670 43847 203.133.33.106 80 WAN1 192.168.1.105 1479 38792 203.84.196.97 80 WAN2 192.168.1.131 1479 45448 216.155.193.131 119 WAN2 192.168.1.105 1480 38793 203.84.196.97 80 WAN2 192.168.1.191 1961 61290 202.43.199.246 80 WAN1 192.168.1.105 1482 38795 203.84.196.97 80 WAN2 192.168.1.196 1451 62060 220.133.85.118 1095 WAN2 我想要統計各個IP的連線總數,於是我寫了下面的程式 #!/usr/bin/perl -w $FileName = "./session"; $TempFile = "./temp"; #讀取來源檔 open (SRC_FILE, "$FileName"); open (TEMP_FILE, ">$TempFile"); #將讀取到的sessio檔去掉開頭的空白後另存到TempFile裡 while(<SRC_FILE>) { $_ =~ s/^\s+//g; print TEMP_FILE; } close(SRC_FILE); close(TEMP_FILE); open (TEMP_FILE, "$TempFile"); @array = <TEMP_FILE>; close (TEMP_FILE); #將項目拆解並存到各自的陣列 foreach (@array) { ($pri_ip, $pri_port, $pse_port, $peer_ip, $peer_port, $interface) = split(/\s+/, "$_"); push @pri_ip, $pri_ip; push @pri_port, $pri_port; push @pse_port, $pse_port; push @peer_ip, $peer_ip; push @peer_port, $peer_port; push @interface, $interface; } #將儲存IP的陣列排序 @s = sort {$a cmp $b} @pri_ip; #記數歸零 $counter = 1; $i = 0; { # no warnings; while( $i <= $#s ) { if( $s[$i] eq $s[($i+1)] ) { $counter++; $i++; } else { print "$s[$i] => $counter\n"; $counter = 1; $i++; next; } } } 問題來了當我執行到最後一個比較時就會出現如下錯誤,所以我只好在while上面 加上no warnings來避免錯誤訊息的產生 192.168.1.192 => 1 192.168.1.194 => 3 192.168.1.195 => 1 192.168.1.196 => 2 192.168.1.211 => 1 Use of uninitialized value in string eq at ./session.pl line 39. 192.168.1.93 => 1 想請教各位是否有更好的方式來處理呢?先謝謝您花時間看我的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.169.170.106

03/06 22:25, , 1F
單純想統計 ip 出現次數的話, 用 hash 比較方便喔 :p
03/06 22:25, 1F

03/06 22:27, , 2F
Array::PAT 看看~
03/06 22:27, 2F

03/06 22:30, , 3F
那個 warning 想必是 undef value, array accees 超出囉
03/06 22:30, 3F
文章代碼(AID): #15xNRvq0 (Perl)
文章代碼(AID): #15xNRvq0 (Perl)