不能使用字符串作为ARRAY参考,而严格参考"正在使用

时间:2018-05-16 09:48:24

标签: perl

我正在尝试执行下面提到的代码并观察错误

  

不能使用字符串(" RCSoWLAN; ePDG-2; Qguest; ASUS_ATT _" ...)作为ARRAY参考,而#34; strict refs"在使用中。

Perl代码

#!/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++;
}

2 个答案:

答案 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) { ...

您还没有解释如何从字符串中填充结构,因此我无法帮助您完成剩余的代码。