初始化perl数组元素(如果未定义)或为空

时间:2013-06-10 21:24:41

标签: arrays perl initialization

如果未定义或为空,是否有一种简单的方法(迭代每个元素除外)初始化@fields的n个元素?

my @fields = '-' x n;
$string    = 'a|b||c';
@fields    = split(/\|/,$string);

2 个答案:

答案 0 :(得分:1)

要创建 n 元素的数组,您应该使用

my @fields = ('-') x $n;

请注意美元符号和括号。

我不明白你的代码的以下两行是什么意思。如果您希望$fields[2]在拆分后包含-,则可以在拆分前修复字符串:

my $string =  'a|b||c';
$string    =~ s/\|(?=\|)/|-/g;
my @fields =  split /\|/, $string;

或之后使用map

my $string = 'a|b||c';
my @fields = map length $_ ? $_ : '-', split /\|/, $string;

答案 1 :(得分:0)

我猜你可能想要初始化分割不提供的所有字段?如果是这样,你可以这样做:

my @fields = ( split(/\|/, $string), ('-') x $n )[0..$n-1];

或者这个:

my @fields = split /\|/, $string;
@fields[ @fields..$n ] = ('-') x ($n-$#fields);

或者这个:

my @fields = split /\|/, $string;
$_ = '-' for @fields[ @fields..$n ];