Perl中的qw表示形式的数组的数组

时间:2018-08-14 12:40:46

标签: perl data-structures

你好,我想形成一个这样的数据结构:

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";

它什么也不打印。我如何安排它,以便可以正确访问该值?谢谢。

2 个答案:

答案 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"
    );