- 論壇徽章:
- 307
|
本帖最后由 sunzhiguolu 于 2015-09-28 17:32 編輯
回復(fù) 1# 賽萌
您的代碼好多地方, 我還沒(méi)有接觸到. 所以不能為您指出問(wèn)題, 抱歉.
在沒(méi)有更好的解決方案前, 可以試下我這個(gè), 等有了更好的方法再更換好了! (笨方法)- #!/usr/bin/perl
- use 5.010;
- use strict;
- use warnings;
- #函數(shù) set_or_get_last_id 用來(lái)存放或獲取上一次的 $id 的值
- sub set_or_get_last_id{
- state $last_id;
- $last_id = shift if (@_);
- $last_id;
- }
- #哈希變量 %keys_name, %keys_value 并行存儲(chǔ) ($id, $name) 及 ($id, $max_long_str)
- my (%keys_name, %keys_value, $max_long_str);
- while(<>){
- my ($name, $id);
- chomp;
- my @a_line = split /\s+/;
- if (m/^>/){
- ($name, $id) = ($a_line[0], $a_line[1]);
- if (!(exists $keys_name{$id})){
- $name =~ s/\.[0-9]+$//; #加入這句
- $keys_name{$id} = $name;
- $keys_value{$id} = "";
- set_or_get_last_id($id);
- }
- }else{
- my $last_id = set_or_get_last_id();
- $max_long_str = $keys_value{$last_id};
- my $current_str = $a_line[0];
- if (length($current_str) > length($max_long_str)){
- $keys_value{$last_id} = $current_str;
- }
- }
- }
- foreach (keys %keys_name){
- print "$keys_name{$_}\n$keys_value{$_}\n";
- }
復(fù)制代碼 |
|