1

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

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

2 回答 2

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;
于 2013-06-10T21:31:45.303 回答
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 ];
于 2013-06-10T23:04:03.740 回答