Невозможно использовать строку в качестве ссылки ARRAY, когда используются "строгие ссылки"

Я пытаюсь выполнить приведенный ниже код и заметил ошибку

Невозможно использовать строку ("RCSoWLAN;ePDG-2;Qguest;ASUS_ATT_"...) в качестве ссылки ARRAY при использовании "строгих ссылок".

Код 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 ответа

Как говорится в сообщении об ошибке, @{ $result_string } пытается разыменовать строку, как если бы она была ссылкой на массив. Но это всего лишь строка, поэтому Perl не может сделать это за вас

Похоже, у вас есть разделенные точкой с запятой данные, и самый простой подход заключается в использовании split разделить его на поля

Это должно работать лучше для вас

for ( split /;/, $result_string ) {

    print "SSID[$index]: $_\n";
    ++$index;
 }

но я не могу понять, что вы пытаетесь сделать с $_->{$index}->{ssid}, Возможно, вы бы объяснили?

$result_string инициализируется строковым значением. Вы не можете разыменовать строковое значение как ссылку на массив.

Если вы хотите разбить строку на точки с запятой, используйте split:

my @results = split /;/, $result_string;

Затем вы можете перебрать @results:

for my $result (@results) { ...

Вы не объяснили, как структура должна быть заполнена из строки, поэтому я не могу помочь вам с остальным кодом.

Другие вопросы по тегам