2013-02-01 3 views
1

파일에서 모스 부호를 읽고 일반 텍스트로 변환하는 간단한 프로그램을 작성 중입니다. 나는 미친 약간의 실수를하고있다. 나는 perl에 익숙하지 않고 커맨드 라인에서 실행해야만한다. 아래는 내가받는 오류와 코드입니다. 내가 잘못 실행 한 것일 수도 있습니다. 나는 "perl -w Lott_Morse.pl morse.txt"를 명령 행에 입력하고있다. 어떤 도움을 주시면 감사하겠습니다.Perl - 인쇄에서 초기화되지 않은 값으로 인한 오류

오류 :

Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
Use of uninitialized value in print at Lott_CSC360_Morse2.pl line 31, <> line 7. 
The message is 0Jessicas-MacBook-Pro:Documents 

코드 :

#!/usr/bin/perl 

use 5.010; 
use warnings; 

%morse_to_plain=(
".-" =>"A", "-..." => "B", "-.-." => "C", "-.." => "D", "." => "E", 
"..-." => "F", "--." => "G", "...." => "H", ".." => "I", ".---" => "J", 
"-.-" => "K", ".-.." => "L", "--" => "M", "-." => "N", "---" => "O", 
".--." => "P", "--.-" => "Q", ".-." => "R", "..." => "S", "-" => "T", 
"..-" => "U", "...-" => "V", ".--" => "W", "-..-" => "X", "-.--" => "Y", 
"--.." => "Z", "-----" => "0", ".----" => "1", "..---" => "2", "...--" => "3", 
"....-" => "4", "....." => "5", "-...." => "6", "--..." => "7", "---.." => "8", 
"----." => "9", ".-.-.-" => ".", "--..--" => ",", "..--.." => "?", ".----." => "'", 
"-....-" => "-", ".-..-." => '"', ".--.-." => "@", "-...-" => "=", "!" => " " 
); 



chomp(@message = <>); 



print "The message is "; 
foreach $char (@message) 
{ 
    print $morse_to_plain{$char}; 
} 

답변

1

항상 use strict;해야합니다.

#!/usr/bin/perl 

use 5.010; 
use strict; 
use warnings; 

my %morse_to_plain=(
".-" =>"A", "-..." => "B", "-.-." => "C", "-.." => "D", "." => "E", 
"..-." => "F", "--." => "G", "...." => "H", ".." => "I", ".---" => "J", 
"-.-" => "K", ".-.." => "L", "--" => "M", "-." => "N", "---" => "O", 
".--." => "P", "--.-" => "Q", ".-." => "R", "..." => "S", "-" => "T", 
"..-" => "U", "...-" => "V", ".--" => "W", "-..-" => "X", "-.--" => "Y", 
"--.." => "Z", "-----" => "0", ".----" => "1", "..---" => "2", "...--" => "3", 
"....-" => "4", "....." => "5", "-...." => "6", "--..." => "7", "---.." => "8", 
"----." => "9", ".-.-.-" => ".", "--..--" => ",", "..--.." => "?", ".----." => "'", 
"-....-" => "-", ".-..-." => '"', ".--.-." => "@", "-...-" => "=", "!" => " " 
); 

print "The message is \n"; 

while (<>) { 
    chomp; 
    foreach my $char (split ' ') { 
     print $morse_to_plain{$char}; 
    } 
    print "\n"; 
} 
+0

더 이상 오류가 발생하지 않지만 파일의 첫 번째 행만 읽습니다. 모든 내용을 읽어야합니다. – JLott

+0

@JLott 스칼라 컨텍스트에서'<>'를 사용하면 한 줄만 읽습니다. 내가 당신이라면 while (<>) 루프를 사용하고 줄을 하나씩 읽습니다. – TLP

+0

@JLott - 파일을 읽으 려한다는 것을 몰랐기 때문에 사과드립니다. 그것을 위해 스크립트를 조정했습니다. [TLP] (http://stackoverflow.com/users/725418/tlp)의 제안을 통합 해보십시오. – Kenosis

7

해시 값은 정의되지 않는다, 그래서 당신은 당신의 해시에 일치하는 키가없는 문자열 읽고 (초기화) : 파일에 여러 ... --- ... 잘 (모든 모스 내가 아는 코드) 근무 . 입력 문제 일 가능성이 있습니다. 디버깅 목적으로이 시도 : 긴 문자열에 대한

print $morse_to_plain{$char} // "Key does not exist: '$char'\n"; 

을, 당신은이를 고려해 볼 수 있습니다 : 점과 대시의 조합 검색과 대체 텍스트로 변환하거나, 자신의 경우 것입니다

$string =~ s{([-.]+)}{ $morse_to_plain{$1} // $1 }ge; 

을 더 번역이 발견되었습니다. 그것은 자리에 오타가 훨씬 쉽게 만들 것입니다

my %morse_to_plain = (
    ".-"  => "A", "-..." => "B", "-.-." => "C", "-.." => "D", "."  => "E", 
    "..-." => "F", "--." => "G", "...." => "H", ".."  => "I", ".---" => "J", 
    "-.-" => "K", ".-.." => "L", "--"  => "M", "-."  => "N", "---" => "O", 
    ".--." => "P", "--.-" => "Q", ".-." => "R", "..." => "S", "-"  => "T", 
    "..-" => "U", "...-" => "V", ".--" => "W", "-..-" => "X", "-.--" => "Y", 
    "--.." => "Z", "-----" => "0", ".----" => "1", "..---" => "2", "...--" => "3", 
    "....-" => "4", "....." => "5", "-...." => "6", "--..." => "7", "---.." => "8", 
    "----." => "9", ".-.-.-" => ".", "--..--" => ",", "..--.." => "?", ".----." => "'", 
    "-....-" => "-", ".-..-." => '"', ".--.-." => "@", "-...-" => "=", "!"  => " " 
); 

:

은 또한 조금 더 읽기 당신의 해시 할당을 고려해야한다. 또한 반전 찾아보기 테이블을 쉽게 만들 수 있습니다.

my %plain_to_morse = reverse %morse_to_plain; 
+0

탁월한 캐치! 또는 단일 문자 (또는 코드)를 '알 수없는 코드'장소 소유자로 대체하십시오. – Kenosis

+0

좋은 제안! 나는 그것을 다른 많은 것들에도 사용할 것이다. – JLott

관련 문제