我正在尝试执行下面提到的代码并观察错误
不能使用字符串(" RCSoWLAN; ePDG-2; Qguest; ASUS_ATT _" ...)作为ARRAY参考,而#34; strict refs"在使用中。
#!/perl64/bin/perl
use strict;
use warnings;
my $result_string = 'RCSoWLAN;ePDG-2;Qguest;ASUS_ATT_VOWIFI;RCS_IWLAN;Qguest;Pandora;Hydra;ASUS_ATT_VOWIFI_5G;Linksys_Performance_2.4G;RCS_NAT;ePDG7;Qguest;Pandora;Hydra;ipv6testap;Linksys_Performance_5G;ASUS_stress_5G;Hydra';
my $index = 1;
foreach ( @{ $result_string } ) {
print "SSID[$index]: $_->{$index}->{ssid}\n";
$index++;
}
答案 0 :(得分:5)
正如错误消息所示,@{ $result_string }
尝试取消引用该字符串,就好像它是一个数组引用一样。但它只是一个字符串,所以Perl无法为你做到
看起来好像有分号分隔的数据,最简单的方法是使用split
将其分隔为字段
这应该更适合你
for ( split /;/, $result_string ) {
print "SSID[$index]: $_\n";
++$index;
}
但是我不能按照你要对$_->{$index}->{ssid}
进行的操作。也许你会解释一下?
答案 1 :(得分:4)
$ result_string用字符串值初始化。您不能将字符串值取消引用作为数组引用。
如果要将字符串拆分为分号,请使用split:
my @results = split /;/, $result_string;
然后您可以遍历@results
:
for my $result (@results) { ...
您还没有解释如何从字符串中填充结构,因此我无法帮助您完成剩余的代码。