gpt4 book ai didi

arrays - perl:在使用 "strict refs"时,不能将字符串用作ARRAY引用

转载 作者:行者123 更新时间:2023-12-04 03:43:50 24 4
gpt4 key购买 nike

我在尝试将数组传递给子项并读取其他值时遇到了这个问题。在此测试脚本中,我传递了数组@players的引用,但传递了读取字符串$ buffer。

use Data::Dumper;

my @players = [];
my @playerscores = [];
my %FORM;

my $buffer = "numplayers=2&changeplayers=3&CHANGEIT=CHANGEIT&player1=a&player2=b&restart=1&newcoords=";

sub testsub {
my @testee = @$_[0];
print "in testsub: $testee[0]\n";
}

my @holder = split(/&/,$buffer,);
foreach my $iter (@holder)
{
my ($name,$value) = split(/=/,$iter);
$FORM{$name} = $value;
}
$_ = $buffer;
foreach my $key (keys(%FORM))
{
if($key=~ /player[1-9]/)
{
if(!($FORM{$key} eq ""))
{
my $holder = $key;
$holder =~ s/player//;
$players[$holder] = $FORM{$key};
$playerscores[$holder] = 0;
$_ = $buffer;
}
}
}

print "\n Data Dumper on player:\n";
print Dumper(@players);
print "\n\n";

print "Check sub:\n";
testsub(\@players,\@playerscores);

输出:
 Data Dumper on player:
$VAR1 = [];
$VAR2 = 'a';
$VAR3 = 'b';


Check sub:
Can't use string ("numplayers=2

&changeplayers=3&CHA"...) as an ARRAY ref while "strict refs" in use at test-str-pool2.pl line 15.

而我期望 print "in testsub: $testee[0]\n";的结果是“a”或“b”。为什么会这样呢?

最佳答案

您错误地声明了数组,这就是Dumper输出为何将[](空数组引用)作为@players中的第一个元素的原因。用:

my @players = ();
my @playerscores = ();

第二个错误来自:
my @testee = @$_[0];

这将尝试取消引用 $_并从结果数组中获取第一个元素。你的意思是:
my @testee = @{$_[0]};

它从 @_中获取第一个元素,然后对其取消引用。

关于arrays - perl:在使用 "strict refs"时,不能将字符串用作ARRAY引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917991/

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