其实我并不真正了解Perl,但现在我需要更改OTRS的片段。
为了解释上下文,它位于OTRS的Module SystemMonitoring.pm中:
系统通过正则表达式将值从电子邮件中写出并保存在$ 1中。 有三个相关要素:国家,主持人和服务。 仅在元素状态中,我想从$ 2中写出值。在主机和服务的情况下,信息来自$ 1.
以下是摘录:
for my $Element (qw(State Host Service)) {
next ELEMENT if $AlreadyMatched{$Element};
my $Regex = $Self->{Config}->{ $Element . 'RegExp' };
if ( $Line =~ /$Regex/ ) {
# get the found element value
$Self->{$Element} = $1;
# remember that we found this element already
$AlreadyMatched{$Element} = 1;
}
}
我希望有人可以帮我解决这个问题。
非常感谢!
答案 0 :(得分:0)
我假设正如OP所提到的正则表达式是\s*State:\s+(\w+)\s->\s+(\w+)
。
在这种情况下,您只需测试$ Element的值。
if ($Element eq 'State') {
print $2;
}
else {
print $1;
}
或更简洁,
print ($Element eq 'State') ? $2 : $1;