2013-10-25 5 views
0

특정 값 저장소에 속하는 목록 개체에서 완벽하게 작동하는이 코드가 있습니다. 유일한 문제는 공백이나 탭 구분 기호로 출력을 얻을 수 없다는 것입니다.출력 perl의 공백 또는 탭

use strict; 
use warnings; 
use 5.14.0; 
my $file = "test_counter.txt"; 
open DATA, '<', $file or die "$!"; 
my %hash; 
while (<DATA>){ 
    next if /^\s*$/m;) 
    my ($key1,$key2,$val) = /^(\w.+)\|(\w.+) (1|(\d+)(\.(\d+)))$/; 
    $val = int($val*10)/10; 
    $hash{$val}{$key1}++; 
    $hash{$val}{$key2}++; 
    } 
for (-10..10){ 
    $_ = $_/10; 
    say "$_\t", $hash{$_} ? keys $hash{$_} : ''; 
    } 

는 입력 test_counter.txt 파일은 다음과 같다 :

data|all 0.12 
cup|bed 0.16596 
bed|all 0.221 
cup|all 0.21123 
data|bed 0.388 
cup|bed 0.35 
bed|data 0.412 
data|all 0.5236 
data|cup 0.565 
bed|all 0.6174 
all|cup 0.65 
cup|data 0.678 

내가 얻을 출력은 다음과 같습니다

-1 
-0.9  
-0.8  
-0.7  
-0.6  
-0.5  
-0.4  
-0.3  
-0.2  
-0.1  
0 
0.1 bedcupdataall 
0.2 bedcupall 
0.3 bedcupdata 
0.4 beddata 
0.5 cupdataall 
0.6 bedcupdataall 
0.7 
0.8 
0.9 
1 

내가하지만, 탭, 동일을하고 싶습니다 또는 객체 사이의 공백, 또는 객체가 빈에서 발견되지 않을 때 공백이있는 탭 구분 출력이 이상적입니다. 다음과 같이 입력하십시오 :

-1 
    -0.9  
    -0.8  
    -0.7  
    -0.6  
    -0.5  
    -0.4  
    -0.3  
    -0.2  
    -0.1  
    0 
    0.1 bed cup data all 
    0.2 bed cup all 
    0.3 bed cup data 
    0.4 bed data 
    0.5 cup data all 
    0.6 bed cup data all 
    0.7 
    0.8 
    0.9 
    1 

주셔서 감사합니다.

답변

1

사용 join 몇 가지 구분과 함께 배열의 모든 요소를 ​​가입 :

join "\t", keys %{$hash{$_}}; 

예컨대 : 완벽하고 이해하기 쉽게

say "$_\t", $hash{$_} ? join "\t", keys %{$hash{$_}} : ''; 
+0

! 정말 고맙습니다!! – Gabelins

+0

도와 주셔서 감사합니다. – RobEarl

관련 문제