显然不是:
use strict;
use warnings;
use Data::Printer;
my @values = 1 .. 99;
p @values[0..9];
返回
10
据我所知,documentation并未对此事发表任何看法。
答案 0 :(得分:13)
Data::Printer::p
上的原型是\[@$%&];%
,因此它将接受命名数组但不接受任意列表或匿名数组引用。
有一个Data::Printer::p_without_prototypes
函数会接受此输入,如果您使用
Data::Printer
use Data::Printer use_prototypes => 0;
然后当前包中的p
将引用此函数,并接受您的输入。
use Data::Printer use_prototypes => 0;
my @values = 1 .. 99;
p [@values[0..9]];
答案 1 :(得分:12)
Data :: Printer' s OutputStream
需要一个变量,但数组切片不是变量。
为切片的每个元素调用p
。
p
输出:
use Data::Printer;
my @values = 100 .. 199;
p $_ for @values[0..9];
我说这很差,因为它没有显示偏移量,更重要的是,如果索引列表为空,它可能导致根本没有输出。
构建数组。
100
101
102
103
104
105
106
107
108
109
这比第一个选项产生更清晰的输出:
use Data::Printer;
my @values = 100 .. 199;
p @{ [ @values[0..9] ] };
如果您觉得过于复杂,可以覆盖[
[0] 100,
[1] 101,
[2] 102,
[3] 103,
[4] 104,
[5] 105,
[6] 106,
[7] 107,
[8] 108,
[9] 109
]
的原型并改为传递对数组的引用。
p
如果你总是将标量或引用(而不是变量)传递给use Data::Printer;
my @values = 1 .. 99;
&p( [ @values[0..9] ] );
,那么你可以使用以下内容:
p