Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环中的Perl显式包名错误,需要解决问题_Perl - Fatal编程技术网

while循环中的Perl显式包名错误,需要解决问题

while循环中的Perl显式包名错误,需要解决问题,perl,Perl,运行此代码 parsesendnotes.pl 我得到了这些错误 全局符号“%frequencies”要求在./parsenndnotes2.pl第30行显示包名 全局符号“%frequencies”需要在./parsensendnotes2.pl第44行显示包名 全局符号“@tone”要求在./parsensendnotes2.pl第44行显示包名 全局符号“@tone”要求在./parsenndnotes2.pl第45行显示包名 全局符号“$tempo”需要在./parsensendnote

运行此代码

parsesendnotes.pl

我得到了这些错误

全局符号“%frequencies”要求在./parsenndnotes2.pl第30行显示包名

全局符号“%frequencies”需要在./parsensendnotes2.pl第44行显示包名

全局符号“@tone”要求在./parsensendnotes2.pl第44行显示包名

全局符号“@tone”要求在./parsenndnotes2.pl第45行显示包名

全局符号“$tempo”需要在./parsensendnotes2.pl第45行显示包名

全局符号“@tone”要求在./parsensendnotes2.pl第46行显示包名

全局符号“@tone”要求在./parsensendnotes2.pl第46行显示包名

由于编译错误,./parsensendnotes2.pl的执行被中止


我做错了什么?

my%frequencies
from frequencies.pl没有在parsesendnotes.pl中声明

在主脚本中需要
我们的%frequencies
。当然,其他变量也是如此

一些文件:


    • my%frequencies
      from frequencies.pl未在parsesendnotes.pl中声明

      在主脚本中需要
      我们的%frequencies
      。当然,其他变量也是如此

      一些文件:


      name%频率在文件
      frequencies.pl中本地化:my持续到块结束或文件结束

      更好的方法是删除
      my
      ,然后执行以下操作:

      my %frequencies;
      eval { %frequencies = do "frequencies.pl"; }
      # must check $! and $@ here -- see perldoc -f do`
      
      但是,更好的方法是使用YAML:

      频率yml

      然后

      use YAML qw(LoadFile);
      # ...
      my $data = LoadFile("freq.yml");
      %frequencies = %$data;
      
      至于@tone、$tempo&co,同样,
      my
      变量范围被限制为{}块。你应该这样做

      my $x;
      if (...) { $x = ... };
      

      使
      $x
      可在
      if
      外部访问

      name%frequencies在文件
      frequencies.pl
      中本地化:my持续到块结束或文件结束

      更好的方法是删除
      my
      ,然后执行以下操作:

      my %frequencies;
      eval { %frequencies = do "frequencies.pl"; }
      # must check $! and $@ here -- see perldoc -f do`
      
      但是,更好的方法是使用YAML:

      频率yml

      然后

      use YAML qw(LoadFile);
      # ...
      my $data = LoadFile("freq.yml");
      %frequencies = %$data;
      
      至于@tone、$tempo&co,同样,
      my
      变量范围被限制为{}块。你应该这样做

      my $x;
      if (...) { $x = ... };
      
      使
      $x
      可在
      if
      外部访问

      “处理范围”“处理范围”