你好,我想形成一个这样的数据结构:
my @AoAoA = (
[ qw/ [a b] [c d] [e f] / ],
[ qw/ [r t] [m n] [k l] / ],
[ qw/ [z x] [b a] [p u] / ]
);
在这种结构中,当我要访问第一个数组的第一个数组的第一个值时,我将其称为qw表示形式的数组的数组,简称AoAoA:
my $first_elt = @{$AoAoA[0]}[0];# supposed to be [a b]
my $first_val = @{$first_elt}[0];# supposed to be 'a'
print "$first_val\n";
它什么也不打印。我如何安排它,以便可以正确访问该值?谢谢。
答案 0 :(得分:9)
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
是引号的缩写。它将为您隐式引用每个非空格子字符串,这通常非常有用。但是您不能使用相同的构造添加复杂的数据结构
您的作业
qw
与
相同my @AoAoA = (
[ qw/ [a b] [c d] [e f] / ],
[ qw/ [r t] [m n] [k l] / ],
[ qw/ [z x] [b a] [p u] / ]
)
这不太可能是您想要的。相反,您必须使用my @AoAoA = (
[ '[a', 'b]', '[c', 'd]', '[e', 'f]' ],
[ '[r', 't]', '[m', 'n]', '[k', 'l]' ],
[ '[z', 'x]', '[b', 'a]', '[p', 'u]' ]
)
来在结构中仅定义字符串
qw//
那你就可以写
my @AoAoA = (
[ [ qw/ a b / ], [ qw/ c d / ], [ qw/ e f / ] ],
[ [ qw/ r t / ], [ qw/ m n / ], [ qw/ k l / ] ],
[ [ qw/ z x / ], [ qw/ b a / ], [ qw/ p u / ] ]
)
或者您可以只使用
my $first_elt = $AoAoA[0][0]; # ['a', 'b']
my $first_val = $first_elt->[0]; # 'a'
答案 1 :(得分:1)
这是行不通的,因为您不能在qw
中使用方括号。因此您qw中的元素是“ [a
”,“ b]
”,...。
您可能想要的是:
my @AoAoA = (
[ [qw/a b/], [qw/c d/], [qw/e f/] ],
[ [qw/r t/], [qw/m n/], [qw/k l/] ],
[ [qw/z x/], [qw/b a/], [qw/p u/] ]
);
尝试使其更短:
my @AoAoA = map {[map {[split ' ']} split /,/]} (
"a b,c d,e f",
"r t,m n,k l",
"z x,b a,p u"
);