我的要求是传递带+的字符串(例如:ABC + DEF)。并且它应该与actual_state的任何值匹配,值可以是ABC+DEF ABC+DEF, ABC+DEF,,
等。在ABC + DEF之后可以有一个或多个逗号。但它不应与ABC+DEF, PQR-SL
匹配。
以下是我尝试过的代码段:
sub verify_state{
my $expected_state = shift;
my $vol = 'vol';
my $actual_state = 'ABC+DEF,';
print "Verify backend state for $vol\n";
print "Expected backend state for $vol = $expected_state\n";
print "Actual backend state for $vol = $actual_state\n";
if ( $expected_state !~ /$actual_state,*$/ ) {
print
"Expected state was $expected_state but got $actual_state for $vol\n"
;
return 0;
}
return 1;
}
my $val = verify_state('ABC+DEF');
print $val,"\n";
如果我通过ABC+DEF
,它应该给我1。
0如果我将通过ABC+DEF, PQR-SL
为什么我写my $actual_state = 'ABC+DEF,';
因为值ABC+DEF ABC+DEF, ABC+DEF,,
是特定键的哈希值的一部分,例如。 my $actual_state = $status->{state};
。
答案 0 :(得分:4)
您的,
中有一个逗号$actual_state
硬编码。因此它无法匹配您正在测试的输入,ABC+DEF
没有逗号。您构建模式的方式还需要转义+
(感谢slebetman),所以
my $actual_state = 'ABC\+DEF';
并且发布的代码在我的测试中有效。
这假设您的输入必须以该字符串结尾,并且可选地仅使用逗号。
答案 1 :(得分:3)
为什么我写了$ actual_state ='ABC + DEF';因为价值观 ABC + DEF ABC + DEF,ABC + DEF ,,作为哈希值的一部分出现 对于特定的密钥,例如。我的$ actual_state = $ status-> {state};
如果是这种情况,那么您可以从Prevent
中删除尾随逗号,或者在模式匹配中忽略它们。
也使用quotemeta。请参阅下面的示例以获得一个想法。
$actual_state