Как разыменовать массив - PullRequest
       2

Как разыменовать массив

3 голосов
/ 14 декабря 2011

Я пытаюсь получить отдельные элементы массива, хранящиеся в качестве ссылки.

my @list = ("three 13  3  1  91 3", "one   11  5  1  45 1",
            "two   12  7  1  33 2", "four  14  1  1  26 4");

my @refList = map { [$_, (split)[-1]] } @list;

# see what it is in @refList
use Data::Dumper;
print Dumper(@refList);

print "\n the value is $refList[0][0][1]";

Вывод

$VAR1 = [
          'three 13  3  1  91 3',
          '3'
        ];
$VAR2 = [
          'one   11  5  1  45 1',
          '1'
        ];
$VAR3 = [
          'two   12  7  1  33 2',
          '2'
        ];
$VAR4 = [
          'four  14  1  1  26 4',
          '4'
        ];

 the value is

Но мне нужен вывод

 print "\n the value is $refList[0][0][1]" as 13

Как получить значение

Ответы [ 3 ]

6 голосов
/ 14 декабря 2011

Вы используете слишком много [0] в своем отпечатке, чтобы ссылаться на значение 3, о котором вы говорите, должно читаться

$refList[0][1]

Я думаю, что схожу с ума,Клянусь, я думал, что вы говорили о значении 3 ранее.Хотя я не вижу никаких изменений в вашем посте, странно .. Я виню в недостатке сна.

Если вы ищете значение 13 (которое в настоящее время говорится в ваших сообщениях), вы должны изменить свой код на что-то какниже

use Data::Dumper;

my @list    = ("three 13 3 1 91 3", "one 11 5 1 45 1", "two 12 7 1 33 2", "four 14 1 1 26 4");
my @refList = map {@_=split;$_[0]=$_;[@_]} @list;

# print Dumper [@refList];

print "\n the value is ", $refList[0][1];

Если вы просто хотите, чтобы каждая строка превращалась в ссылку на массив, используйте это как объявление / определение @refList.

my @refList = map {[split]} @list;
3 голосов
/ 14 декабря 2011

Как refp сказал, что вы используете слишком грязный [0], вы можете сделать:

my @list    = ("three 13 3 1 91 3", "one 11 5 1 45 1", 
               "two 12 7 1 33 2", "four 14 1 1 26 4");

my @refList = map {[split]} @list;
print "\n the value is ", $refList[0][1];

Но если вы хотите иметь эти 3 уровня, это сделает работу:

my @list    = ("three 13 3 1 91 3", "one 11 5 1 45 1",
               "two 12 7 1 33 2", "four 14 1 1 26 4");
my @refList = ([map {[split]} @list]);
print "\n the value is ", $refList[0][0][1];
0 голосов
/ 14 декабря 2011
my @list = ( "three 13 3 1 91 3", "one 11 5 1 45 1", "two 12 7 1 33 2", "four 14 1 1 26 4" );

my @refList = map { my @t = split; shift(@t); [ $_, @t ]; } @list;

# see what it is in @refList
use Data::Dumper;
print Dumper(@refList);

print "\n the value is $refList[0][0][1]";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...