我有一个如下字符串:
string = "thing: thing\nthing: thing\nthing: thing\nthing: thing"
...其中行数(换行符分隔)最多为4,最小为0。我想将第2,3和4行提取到单独的变量中。但是,如果缺少一行,这将失败。例如,我可能会这样做:
my @tmparray = split ('\n', $string);
my $var1 = $tmparray[1];
my $var2 = $tmparray[2];
my $var3 = $tmparray[3];
如果数组中没有第四个元素,则上面的内容会中断。关于如何更好地处理这种情况的任何建议?
答案 0 :(得分:4)
您可以跳过临时变量并直接指定:
my ($var0, $var1, $var2, $var3) = split /\n/, $string;
如果分隔字符串中缺少字段,则缺少的变量将是未定义的。这与使用数组时的行为相同。定义何时缺少字段的方法是,它将是未定义的:
if (defined $var1) { # field exists
您还可以计算字段,如果使用数组
,这将更容易my @fields = split /\n/, $string;
my $count = @fields; # the size of the array
另请注意,拆分模式是正则表达式(/\n/
),而不是字符串。如果您提供字符串,它仍将被视为正则表达式,但引用可能会让您感到困惑。因此,除非您在空白处使用默认的' '
拆分,否则请始终使用正则表达式。有关详细信息,请参阅perldoc -f split
。