Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了不能使用未定义的值作为符号perl大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在文件中写入从数组中获取的一些值.但我有一些错误”不能使用未定义的变量作为…第81行的符号引用:
foreach $k (sort keys %{$value2}){
    print $value4 $k." = ".%{$value2{$k}}. $value3;



sub printit{
  $value1 = $_[0];#"ipadress" is a String
  $value2 = $_[1];#%hash2
  $value3 = $_[3];#"paquet" is a String
  $value4 = $_[4];#sourcE is the file name

  foreach $k (sort keys %{$value2}){
    print $value4 $k." = ".%{$value2{$k}}. $value3;
    if (%{$value2{$k}} >= 2) { print $value4 "s";}
    print $value4 "\n";
  }
}

printit('ipadress',\%hash2,' paquet'. sourcE );

有人可以指出我有什么问题吗?

事情是我的代码是这一个,它工作正常.而且我没有连同sourcE并且它仍然正常工作.

print sourcE "Ipadress #2\n\n";
foreach $k (sort keys %hash2){
  print sourcE $k." = ".$hash2{$k}." paquet";
  if ($hash2{$k} >= 2) { print sourcE "s";}
  print sourcE "\n";
}

但我有很多代码可以做同样的事情所以我想创建一个能够减少行数的函数.

解决方法

你在这里忘了逗号或连词:
print $value4 $k." = ".%{$value2{$k}}. $value3;

Perl认为你想使用$value4有一个文件句柄(符号),显然$value4是未定义的.它未定义的原因是因为你为它赋值$_ [4],但你可能想要$_ [3](因为数组是零索引的.)

看起来你打算将$value4作为输出的文件名;如果是这种情况,那么你需要实际打开该文件来获取文件句柄:

open my $fh,'>',$value4 or die "Could not open file $value4: $!";
...
print { $fh } $k." = ".%{$value2{$k}}. $value3;

所以你要解决三件事:

>找出为什么$value4未定义并修复它. (当你发现自己在标量名称上附加数字时,你可能还是想要使用数组.你可以直接使用@_或者将值集中到@args数组而不是一堆标量.)
>弄清楚如何格式化输出字符串并使用文件句柄而不是文件名进行打印.
>弄清楚如何序列化$value2 {$k}引用的哈希,因为在标量上下文中打印哈希几乎肯定不是你想要做的.

(在我意识到你缺少文件句柄后更新了建议)

大佬总结

以上是大佬教程为你收集整理的不能使用未定义的值作为符号perl全部内容,希望文章能够帮你解决不能使用未定义的值作为符号perl所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。