You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字符串,根本不是什么哈希引用。

解决步骤

  1. 把分号分隔的字符串拆分成数组:用Perl的split函数,根据分号;把字符串拆成一个个独立的SSID元素,存到数组里。
  2. 正确遍历数组并打印:遍历拆分后的数组,直接输出每个元素就行,不需要多余的哈希引用操作。

修正后的完整代码

#!/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:56:39