Arrays 在Perl中逐行比较两个字符串
我正在寻找类似的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;
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";