【问题标题】:can't use an undefined value as a symbol perl不能使用未定义的值作为符号 perl
【发布时间】:2013-05-06 10:11:10
【问题描述】:

我正在尝试在文件中写入一些取自数组的值。但我有一些错误''Can't use an undefined variables as a symbol reference at... 第 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";
}

但是我有很多代码做同样的事情,所以我想创建一个函数来减少行数。

【问题讨论】:

    标签: perl function file-io hash parameters


    【解决方案1】:

    您在这里忘记了逗号或连接:

    print $value4 $k." = ".%{$value2{$k}}. $value3;
    

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

    您似乎打算将$value4 用作您的输出文件name;如果是这种情况,那么您需要实际打开该文件以获取文件句柄:

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

    所以你需要解决三件事:

    1. 找出$value4 未定义的原因并修复它。 (当您发现自己在标量名称上附加数字时,您可能还是想使用数组。您可以直接使用 @_ 或将值抓取到 @args 数组中,而不是一堆标量。)

    2. 弄清楚您希望如何格式化输出字符串并为print 使用文件句柄,而不是文件名。

    3. 弄清楚您希望如何序列化 $value2{$k} 引用的哈希,因为在标量上下文中打印哈希几乎肯定不是您想要做的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多