我的要求是传递一个带有 + 的字符串(例如: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";
Run Code Online (Sandbox Code Playgroud)
如果我通过,它应该返回我 1 ABC+DEF。0 如果我会通过ABC+DEF, PQR-SL
为什么我写my $actual_state = 'ABC+DEF,';
因为这些值ABC+DEF ABC+DEF, ABC+DEF,,是作为特定键的哈希值的一部分出现的,例如。my $actual_state = $status->{state};.
您,的$actual_state. 所以它不能匹配你正在测试的输入,ABC+DEF没有逗号。您构建模式的方式还需要逃避+(感谢slebetman),所以
my $actual_state = 'ABC\+DEF';
Run Code Online (Sandbox Code Playgroud)
并且发布的代码在我的测试中有效。
这假设您的输入确实必须以该字符串结尾,并且可以选择后跟逗号。