perl - 编译错误: Requires Explicit Package Name

标签 perl file file-io compiler-errors

我只是从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;
    };
}

最佳答案

您使用strict,因此应首先声明全局变量$ message。但是正如ikegami在评论中所说,使用严格和警告是编写perl代码时的最佳实践之一。编译指示会尽快捕获许多错误,否则它们就会被捕获,这使得更容易找到错误的根本原因(就像您提供的错误一样)。根本原因可能是需要进行错误或验证检查,而无论程序员是否熟练,这都可能发生。

我认为您想要的是以下代码:

#!/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";

关于perl - 编译错误: Requires Explicit Package Name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741640/

相关文章:

perl - 双箭头 (=>) 运算符在 Perl 中如何工作?

java - 将 Java STDOUT 流式传输到 perl STDOUT

Java删除超过N天的文件

pdf - 后记 : Reading a file, 写入 pdf

java - 如何使用Java读取文本文件的特定部分

regex - 为什么非捕获组(?:) seem to not be working?

perl - Perl 中的 CRLF 与 Unicode 翻译

PHP:可以包含 file_exists() 说不存在的文件

c - 如何在 C 中处理位数据

java - 使用 FileInputStream 从文件中读取文本