将换行符分隔的字符串拆分为三个变量,#newlines unknown

时间:2013-11-19 22:38:16

标签: regex string perl split

我有一个如下字符串:

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];

如果数组中没有第四个元素,则上面的内容会中断。关于如何更好地处理这种情况的任何建议?

1 个答案:

答案 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