PERL:逐行文本解析脚本

时间:2013-11-28 12:44:14

标签: regex perl parsing

对于练习和好奇心,任何人都知道以下脚本是否可以更加紧凑和快捷:

foreach(@list){
    if ($_=~"givenName: ") {
        $cname=$_;
        $cname=~ s/givenName: //g;
    } 
    if ($_=~"cn: ") {
        $cn=$_;
        $cn=~ s/cn: //g;
    }
    ...
}

什么是: - 它在行内查找一个字符串,以查看它是否包含该特定索引 - 然后剥离字符串并读取内容的其余部分,将内容放入变量中。 - 该脚本逐行读取另一个脚本的结果,并识别每行的字段,将值放入适当的变量

3 个答案:

答案 0 :(得分:5)

如果列表中的每一行都保证采用'variableName:someText'格式,那么你可以这样做:

foreach (@list) {
    /^(\w+): (.*)/ && $vars{$1} = $2;
}

它与您的解决方案不完全相同 - 它将结果放入%vars哈希而不是名为$cname$cn等的变量中 - 但它更简洁,更通用

答案 1 :(得分:3)

这样的事情怎么样?

my $data = {}; #a hashref to store your data
foreach my $line(@list){
    $line =~ s/(givenName|cn|more|names):\s//g and $data->{$1} = $line;
    ...
}
#EDIT: now you have all your data inside the hashref and can call each var accordingly
print $data->{givenName};
print $data->{cn};

答案 2 :(得分:0)

my @list = ('name', 'givenName: ', 'noname');
foreach(@list){
    s/givenName: //g if /givenName: /; 
    my $var = $_;
    ...
}