我有一個用Perl編寫的解析器,它解析固定長度記錄的文件。部分記錄由多個字符串組成(也是固定長度),僅由數字組成。字符串中的每個字符都被編碼爲數字,而不是ASCII字符。也就是說,如果我有字符串12345,它編碼爲01 02 03 04 05(而不是31 32 33 34 35)。解壓縮結合加入Perl的性能
我用解壓解析記錄,這個特定部分被解壓爲@array = unpack "C44", $s
。然後我通過簡單的連接恢復所需的字符串,如$m = join("", @array)
。
我想知道如果這是一個最佳的解碼方式。文件相當大,數百萬條記錄,顯然我試圖查看是否可以優化。 Profiler顯示大部分時間都用於解析記錄(即讀取,寫入和其他東西不是問題),並且在解析大部分時間都是由這些連接取得的。我從其他來源記得,加入是非常有效的操作。任何想法,如果有可能加快代碼或已經是最佳的?也許有可能以某種聰明的方式避免這個中間數組,例如使用pack/unpack組合呢?
編輯:代碼示例
我嘗試優化看起來像這樣的代碼:
while (read(READ, $buf, $rec_l) == $rec_l) {
my @s = unpack "A24 C44 H8", $buf;
my $msisdn = substr $s[0], 0, 11;
my $address = join("", @s[4..14]);
my $imsi = join("", @s[25..39]);
my $ts = localtime(hex($s[45]));
}
增加了更多的問題代碼。 – MariusM