我试图比较一个变量和另一个变量形式的变量。如果变量的内容完全相同,则匹配很好但如果值的顺序不同,我希望匹配发生。
示例:
#!/usr/bin/perl
my $output = "test0 test1";
my $expected_output = "test1 test0";
my $expected_regex = qr/^$expected_output\s*$/;
print "Expected_regex :: $expected_regex\n";
if ($output =~ $expected_regex) {
print "pass\n";
}
在我的示例中,即使它们包含相同的值但不包含相同的顺序,我还能做些什么来制作$output = $expected_regex
?
答案 0 :(得分:4)
假设您的输入真的“那么简单”,即用空格分隔的单词,您可以这样做:
#! /usr/bin/perl -w
use strict;
use warnings;
my $output = "test0 test1";
my $expected_output = "test1 test0";
# Store the sorted pieces of each string in a list
my @o = sort(split(/ /, $output));
my @e = sort(split(/ /, $expected_output));
# Compare both arrays for equality of each member
print "pass\n" if (@o ~~ @e);
请参阅smart matching in detail了解有趣的~~
运算符。
如果您的输入不是那么简单,可能会详细阐述分割中的/ /
,或者可以推导出类似的技术。
如果没有,只需保留前两行并将其放入所有非平凡的脚本中。这肯定能帮到你。