Arrays 在Perl中逐行比较两个字符串

Arrays 在Perl中逐行比较两个字符串,arrays,string,perl,Arrays,String,Perl,我正在寻找类似的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"; } my@lines1=split/\n/,$str1; my@lines2=split/\n/,$str2;

我正在寻找类似的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";
}
my@lines1=split/\n/,$str1;
my@lines2=split/\n/,$str2;

对于(int$i=0;$i您所写的有点不错,只是您不能在Perl
行1中使用该符号。length
int$i
~=
不是运算符,您的意思是
=
,但这是错误的工具。另外
if
后面必须有块
{}

您只需要
$i<@lines1
来获取数组大小,
my$i
来声明词法变量,
eq
来进行字符串比较

从技术上讲,您可以使用绑定运算符执行字符串比较,例如:

"foo" =~ "foobar"
但在比较文字字符串时,这不是一个好主意,因为您可以获得部分匹配,并且需要转义元字符。因此,只使用
eq
更容易

对循环使用C样式是有效的,但更像Perl的方法是使用以下符号:

for my $i (0 .. $#lines1)

它将在从0到数组的最大索引的范围内迭代。

Perl允许您通过引用保存字符串的标量变量来打开字符串上的文件句柄:

open my $string1_fh, '<', \$string1 or die '...';
open my $string2_fh, '<', \$string2 or die '...';

while( my $line1 = <$string1_fh> ) {
    my $line2 = <$string2_fh>;
    ....
    }
打开我的$string1_fh,”

my@lines1=split(/^/,$str1);
my@lines2=拆分(/^/,$str2);
#在行首拆分
#如果要忽略换行符和尾随空格,请使用/\n/
对于($i=0;$i<@lines1;$i++){
如果(第1行[$i]ne行第2行[$i]),则打印“第$i\n行中的差异”;
}

如果从数组中创建哈希映射,比较数组会更容易

#Searching the difference
@isect = ();
@diff  = ();
%count = ();

foreach $item ( @array1, @array2 ) { $count{$item}++; }

foreach $item ( keys %count ) {
    if ( $count{$item} == 2 ) {
        push @isect, $item;
    }
    else {
        push @diff, $item;
    }
}

#Output
print "Different= @diff\n\n";
print "\nA Array = @array1\n";
print "\nB Array = @array2\n";
print "\nIntersect Array = @isect\n";

即使在拆分之后,您也可以将它们作为数组进行比较。

此外,
if
块需要
{…}
大括号。对您在此处尝试执行的操作进行一些解释将非常有用
#Searching the difference
@isect = ();
@diff  = ();
%count = ();

foreach $item ( @array1, @array2 ) { $count{$item}++; }

foreach $item ( keys %count ) {
    if ( $count{$item} == 2 ) {
        push @isect, $item;
    }
    else {
        push @diff, $item;
    }
}

#Output
print "Different= @diff\n\n";
print "\nA Array = @array1\n";
print "\nB Array = @array2\n";
print "\nIntersect Array = @isect\n";