以下代码在perl中的含义是什么:
foreach (@a) {
if ( $_ =~ m/active/ ) {
s/ *//g;
s/\r//;
my @v = split(/\-/);
$_cfg{$v[0]} = $v[1]; # Begin loading hash
}
}
答案 0 :(得分:2)
以下是解释:
foreach (@a) { # loop on all elements of array @a
if ( $_ =~ m/active/ ) { # if current element contains 'active'
s/ *//g; # removes all spaces
s/\r//; # remove carriage return
my @v = split(/\-/); # split on dash
$_cfg{$v[0]} = $v[1]; # populates the hash %_cfg where the key is
# what there is before the first dash
# and value is what is between the first and the second dash
# or end of string
}
}
如果数组@a
包含例如:
my @a = (
'active-true',
'this is not - active'
'whatever',
);
然后哈希%_cfg
将包含:
%_cfg =
(
active => 'true',
thisisnot => 'active',
);
答案 1 :(得分:1)
给定数组@a
:
\r
换行符。 @v
,用于分割-
字符上的(修改过的)行。 @v
的第一个元素,值是第二个。 所以给出:
fish-cab bage-42-moo-active
最终会:
$_cfg{'fish'} = "cabbage";
perl -MO=Deparse
可以帮助理解这一点。要理解的核心是$_
- 这是隐式变量。它为循环的每次迭代设置为当前值,并且是某些函数的默认操作。例如split
或使用s/text/newtext/
的模式替换。
答案 2 :(得分:1)
这里有解释: -
对于数组中的每个元素:a
,如果匹配'有效': -
我认为a
中的每个元素都是由'分隔的键值对 - '