对于练习和好奇心,任何人都知道以下脚本是否可以更加紧凑和快捷:
foreach(@list){
if ($_=~"givenName: ") {
$cname=$_;
$cname=~ s/givenName: //g;
}
if ($_=~"cn: ") {
$cn=$_;
$cn=~ s/cn: //g;
}
...
}
什么是: - 它在行内查找一个字符串,以查看它是否包含该特定索引 - 然后剥离字符串并读取内容的其余部分,将内容放入变量中。 - 该脚本逐行读取另一个脚本的结果,并识别每行的字段,将值放入适当的变量
答案 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 = $_;
...
}