Dav*_*idO 12
看看perldoc perllol.这代表"Perl列表列表",它是一种多维数据结构的名称.
考虑@array.如果不是在@array元素中放置简单值而是放置对数组的引用,那么现在您可以将数据结构视为数组数组或二维数组.想要3D吗?没问题.你可以去任何你想要的深度.
@array = (
[ 'A', 'B', 'C' ],
[ 'D', 'E', 'F' ],
[ 'G', 'H', 'I' ],
); # A 2D structure represented as a LoLs.
@array = (
[ [ 'A', 'B', 'C' ], [ 'D', 'E', 'F' ], [ 'G', 'H', 'I' ] ],
[ [ 'J', 'K', 'L' ], [ 'M', 'N', 'O' ], [ 'P', 'Q', 'R' ] ],
[ [ 'S', 'T', 'U' ], [ 'V', 'W', 'X' ], [ 'Y', 'Z', 'a' ] ],
); # A 3D structure.
@array = (
[ [ [ 'A', 'B' ], [ 'C', 'D' ] ], [ [ 'E', 'F' ], [ 'G', 'H' ] ] ],
[ [ [ 'I', 'J' ], [ 'K', 'L' ] ], [ [ 'M', 'N' ], [ 'O', 'P' ] ] ],
); # A 4D structure.
Run Code Online (Sandbox Code Playgroud)
您的想象力和可用RAM是数据结构变得复杂或可容纳多少维度的唯一约束.它甚至不必是统一的:
@array = ( [ 'a', 'b' ], 'c', [ 'd', 'e', [ 'f', 'g', 'h' ] ] );
Run Code Online (Sandbox Code Playgroud)
如何链接列表:
$head->[ 'a', [ 'b', [ 'c', [ 'd', [ 'e', [ 'f', [ 'g', undef ] ] ] ] ] ] ];
Run Code Online (Sandbox Code Playgroud)
而所有这些只处理与数组引用相结合的简单标量值.您还可以使用哈希引用,代码引用,glob引用,对象引用甚至标量引用.有很多可用的力量.
其他有用的阅读材料是perldoc perlreftut,perldoc perlref和perldoc perldsc(数据结构手册),以及以下书籍:Intermediate Perl,Perl编程,甚至有些过时的Perl Mastering算法.