【发布时间】:2014-07-18 01:16:02
【问题描述】:
我有这个问题,我试图将一个数组传递给一个子,它读取一些其他值。在这个测试脚本中,我传递了数组 @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.
而我期待“a”或“b”作为print "in testsub: $testee[0]\n"; 的结果。为什么会这样?
【问题讨论】:
-
您列出的代码当前未报告该错误。
-
我漏掉了
use strict; use warnings;