Вы также можете читать файл построчно, помечая элементы массива как undef
, когда есть строка, для которой нет общего соответствия:
use strict;
use warnings;
open(my $read,"<","input_file") or die $!;
my $first=1; #Flag to indicate whether or not we are on the first line.
my @characters=(); #Array for characters
while(my $line=<$read>)
{
chomp($line);
if($first)
{
@characters=split(//,$line);
$first=0;
}
else
{
my @temp_arr=split(//,$line);
foreach(0..$#characters)
{
$characters[$_]=undef unless $characters[$_] eq $temp_arr[$_];
}
}
#If we do not have any characters in common, bail out!
unless(scalar(grep{defined($_)}@characters))
{
print "Sorry, there are no characters in common positions within all rows of file input_file\n";
exit(1);
}
}
close($read);
print "Here are the common characters and positions:\n\n";
foreach(0..$#characters)
{
print "" . ($_ + 1) . ": " . $characters[$_] . "\n" if defined($characters[$_]);
}
Для ввода в вашем вопросе вывод:
Here are the common characters and positions:
1: a
4: d
7: g
Обратите внимание, что в этом коде предполагается, что все ваши строки имеют одинаковую длину (или, по крайней мере, ни одна строка не длиннее первой строки). Если это не так, вам необходимо соответствующим образом изменить код.