我正在寻找类似的 Perl 代码
my @lines1 = split /\n/, $str1;
my @lines2 = split /\n/, $str2;
for (int $i=0; $i<lines1.length; $i++)
{
if (lines1[$i] ~= lines2[$i])
print "difference in line $i \n";
}
逐行比较两个字符串并显示有差异的行。
我知道我写的东西是C/Perl/伪代码的混合体。我如何以在 Perl 上运行的方式编写它?
最佳答案
您所写的内容是可以的,只是您不能在 Perl 中使用该表示法 lines1.length
, int $i
,和~=
不是运算符,您的意思是 =~
,但这是错误的工具。另外if
必须有一个 block { }
之后。
你想要的只是$i < @lines1
要获取数组大小,my $i
声明一个词法变量,并且 eq
用于字符串比较。连同 if ( ... ) { ... }
.
从技术上讲,您可以使用绑定(bind)运算符来执行字符串比较,例如:
"foo" =~ "foobar"
但是在比较文字字符串时这不是一个好主意,因为您可以获得部分匹配,并且需要转义元字符。因此,使用 eq
更容易.
使用 C 风格的 for 循环是有效的,但更 Perl 风格的方法是使用此表示法:
for my $i (0 .. $#lines1)
它将在 0 到数组的最大索引范围内进行迭代。
关于arrays - 在 Perl 中逐行比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589738/