我正在尝试在文件中写入从数组中获取的一些值.但我有一些错误”不能使用未定义的变量作为…第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}引用的哈希,因为在标量上下文中打印哈希几乎肯定不是你想要做的.
(在我意识到你缺少文件句柄后更新了建议)