1

我编写了以下代码片段来拆分属性字符串:

输入

$line='VarBinds=var0\=DU_/data02;var1\=GE;var2\=95;var3\=LT;var4\=95;var5\=95';

代码 1:

my ($field,@v)=split /=/, $line;
my $value=join '=', @v;

代码 2:

my $field=$line;
my $value = $field;
$field =~ s#^([[:alnum:]]+)=.*#$1#;
$value =~ s#^[[:alnum:]]+=##;

哪一段代码更好,为什么?这篇文章perl monks我相信Code 1比 更好Code 2,但我不确定。

请注意,我使用了下面的代码(这比Code 1和都好Code 2)。

我的代码:

my ($field,$value)=split /=/, $line, 2;

My Code也欢迎任何改进。

编辑:

  • 稍微澄清了这个问题。
4

1 回答 1

1

split如果您可以依赖字段的顺序,则使用限制是很好的。代码 #2 有点粗略,但做同样的基本工作(假设没有字符串包含换行符)。不过,您的方法以及代码 #1 和 #2 都忽略了转义的等号。您可以使用Text::ParseWords来克服这一点:

use strict;
use warnings;
use Data::Dumper;
use Text::ParseWords;

my $line = 'VarBinds=var0\=DU_/data02;var1\=GE;var2\=95;var3\=LT;var4\=95;';
my @f = quotewords('=', 1, $line);
print Dumper \@f;

输出

$VAR1 = [
          'VarBinds',
          'var0\\=DU_/data02;var1\\=GE;var2\\=95;var3\\=LT;var4\\=95;'
        ];
于 2013-08-06T10:34:01.950 回答