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

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

Невозможно использовать строку ("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 ]

0 голосов
/ 16 мая 2018

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

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

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

for ( split /;/, $result_string ) {

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

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

0 голосов
/ 16 мая 2018

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

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

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

Затем можно выполнить итерацию@results:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...