1

私は Perl を使い始めたばかりで、ファイルを読み取り、そのファイルのモールス符号を別のファイルのプレーン テキストに入れるプログラムを書いています。このエラーが発生していますが、何が問題なのかわかりません。どんな助けでも大歓迎です!

私が受け取っているエラー:

Jessicas-MacBook-Pro:Documents jessica$ perl -w Morse_to_Text.pl <Morse3.rtf> MorseTest.txt
Global symbol "$message" requires explicit package name at Morse_to_Text.pl line 20.
Global symbol "$message" requires explicit package name at Morse_to_Text.pl line 26.
Global symbol "$message" requires explicit package name at Morse_to_Text.pl line 26.
Global symbol "$message" requires explicit package name at Morse_to_Text.pl line 27.

コード:

#!/usr/bin/perl 

 use 5.010;
 use strict;
 use warnings;


my %morsecode=(
".-" =>"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", ".-.-.-" => ".", "--..--" => ",", "..--.." => "?", ".----." => "'",
"-....-" => "-", ".-..-." => '"', ".--.-." => "@", "-...-" => "=", "!" => " "
);


while (<>) {
    chomp;
    foreach my $char ( split ' ' ) {

        $message = $morsecode{$char} + $message;
        print $message;
    };
}
4

2 に答える 2

2

strict を使用するため、最初にグローバル変数 $message を宣言する必要があります。しかし、池上がコメントで言ったように、厳密な使用と警告は、perl コードを記述する際のベスト プラクティスの 1 つです。プラグマは、他の方法でキャッチされるよりも早く多くのエラーをキャッチします。これにより、エラーの根本原因を簡単に見つけることができます (提供するエラーと同様)。根本的な原因は、エラーまたは検証チェックの必要性である可能性があり、プログラマーのスキルに関係なく発生する可能性があります。

あなたが欲しいのは次のコードだと思います:

#!/usr/bin/perl 

 use 5.010;
 use strict;
 use warnings;


my %morsecode=(
".-" =>"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 $message;

while (<>) {
    chomp;
    foreach my $char ( split ' ' ) {
        $message = $message.$morsecode{$char};
    };
}

print $message."\n";
于 2013-02-07T01:19:48.900 に答える
1

$messageこれは、必要に応じて using を宣言しなかったことを意味しますmy $message;


を使用してスクリプトを実行することでメリットが得られる場合があります

perl -Mdiagnostics script.pl

多くの警告/エラーについて説明します。

于 2013-02-07T00:43:33.167 に答える