Perl代码执行报错:Can't use string as an ARRAY ref while "strict refs" in use
解决Perl报错:Can't use string as an ARRAY ref while "strict refs" in use
咱们先拆解下这个报错的核心原因:
你代码里的$result_string是一个普通字符串,但你用@{ $result_string }试图把它当成数组引用来解包遍历——这在use strict模式下是绝对不允许的,Perl会直接抛出这个错误来阻止你这种不合理的操作。另外后面的$_->{$index}->{ssid}也完全不对,因为拆分后的每个元素就是单纯的SSID字符串,根本不是什么哈希引用。
解决步骤
- 把分号分隔的字符串拆分成数组:用Perl的
split函数,根据分号;把字符串拆成一个个独立的SSID元素,存到数组里。 - 正确遍历数组并打印:遍历拆分后的数组,直接输出每个元素就行,不需要多余的哈希引用操作。
修正后的完整代码
#!/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 @ssids = split /;/, $result_string; my $index = 1; foreach my $ssid (@ssids) { print "SSID[$index]: $ssid\n"; $index++; }
额外说明
如果你的原始需求是想让每个SSID对应一个哈希结构(比如包含ssid字段),那你需要先把拆分后的字符串转换成哈希数组,比如:
my @ssid_hashes = map { { ssid => $_ } } split /;/, $result_string; my $index = 1; foreach my $hash_ref (@ssid_hashes) { print "SSID[$index]: " . $hash_ref->{ssid} . "\n"; $index++; }
不过从你的代码来看,应该只是单纯想打印每个分号分隔的SSID,第一种修正方式就足够了。
内容的提问来源于stack exchange,提问作者user9799283
相关产品推荐
相关产品推荐

