gpt4 book ai didi

perl - 不能使用未定义的值作为符号 perl

转载 作者:行者123 更新时间:2023-12-04 20:46:49 24 4
gpt4 key购买 nike

我试图在文件中写入一些取自数组的值。但是我遇到了一些错误“不能使用 undefined variable 作为符号引用在...第 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 数组中,而不是一堆标量。)
  • 弄清楚您希望如何格式化输出字符串并为 print 使用文件句柄,而不是文件名。 .
  • 弄清楚你想如何序列化 $value2{$k} 引用的散列,因为在标量上下文中打印哈希几乎肯定不是您想要做的。

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

    关于perl - 不能使用未定义的值作为符号 perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391047/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com