Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
can';t使用未定义的值作为符号perl_Perl_Function_File Io_Hash_Parameters - Fatal编程技术网

can';t使用未定义的值作为符号perl

can';t使用未定义的值作为符号perl,perl,function,file-io,hash,parameters,Perl,Function,File Io,Hash,Parameters,我试图在文件中写入从数组中获取的一些值。但我有个错误“不能使用未定义的变量作为符号引用。。。第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"

我试图在文件中写入从数组中获取的一些值。但我有个错误“不能使用未定义的变量作为符号引用。。。第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 );
有人能告诉我怎么了吗

问题是我的代码就是这个,它工作得很好。我没有确认来源,它仍然工作正常

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
是未定义的。未定义它的原因是,您为它指定了
$\u4]
的值,但您可能需要
$\u3]
(因为数组的索引为零)

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

open my $fh, '>', $value4 or die "Could not open file $value4: $!";
...
print { $fh } $k." = ".%{$value2{$k}}. $value3;
因此,有三件事需要解决:

  • 找出
    $value4
    未定义的原因并修复该问题。(当您发现自己在标量名称上添加了数字时,您可能还是希望使用数组。您可以直接使用
    @
    或将值捕获到
    @args
    数组中,而不是一堆标量。)

  • 找出输出字符串的格式,并使用文件句柄而不是文件名来打印
    print

  • 找出如何序列化
    $value2{$k}
    引用的哈希,因为在标量上下文中打印哈希几乎肯定不是您想要做的

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