如果未定义或为空,是否有一种简单的方法(迭代每个元素除外)初始化@fields
的n个元素?
my @fields = '-' x n;
$string = 'a|b||c';
@fields = split(/\|/,$string);
答案 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 ];