2013-08-18 4 views

답변

3

$ inp를 선언하지 않았습니다. 또한 cmp의 사용법이 이상하고 단순한 ne이 동일하게 작동하며 누구도 혼동하지 않을 것입니다.

당신은 split의 빈 패턴을 사용하여 문자로 문자열을 분할 한 후 해시에 발생의 수를 셀 수 :

#!/usr/bin/perl 
use warnings; 
use strict; 

print "Enter the inp No's : "; 
while ((my $inp = <STDIN>) ne "\n"){ 
    my %digits; 
    $digits{$_}++ for split //, $inp; 
    for (0 .. 9) { 
     print "$_ ", $digits{$_} || 0, "\n"; 
    } 
} 

정식 방법은, 그래도 tr 연산자를 사용하는 것입니다. 보간하지 않기 때문에 변수 값을 얻기 위해 eval을 사용해야합니다.

#!/usr/bin/perl 
use warnings; 
use strict; 

print "Enter the inp No's : "; 
my %digits; 
while ((my $inp = <STDIN>) ne "\n"){ 
    for (0 .. 9) { 
     my $n = eval "\$inp =~ tr/$_//"; 
     print "$_ $n\n"; 
    } 
} 
+0

위대한 작품입니다. 이 줄이 "$ digits {$ _} ++ split //, $ inp;"에 대해 설명해 주시겠습니까? " – Angus

+0

@Angus :'split //'은 문자 목록을 반환합니다. 'for '가리스트를 반복 할 때,'++'가 증가하기 때문에, 각 문자에 대해 그것에 대응하는 % 자릿수 값이 증가됩니다. – choroba

관련 문제