Я хочу прочитать в файле с некоторыми символами, такими как "!"и "^" и хотел бы удалить их, прежде чем сравнивать их с другими строками из другой строки.Если после удаления символов обе строки совпадают, я хочу сохранить их в другом хеше, называемом «общий».Например ... FileA:
hello!world
help?!3233
oh no^!!
yes!
FileB:
hello
help?
oh no
yes
В этом случае FileA и FileB должны быть идентичны, так как я сравниваю символы до места, где "!"или появляется «^».Я читаю файлы, используя следующий код:
open FILEA, "< script/".$fileA or die;
my %read_file;
while (my $line=<FILEA>) {
(my $word1,my $word2) = split /\n/, $line;
$word1 =~ s/(!.+)|(!.*)|(\^.+)|(\^.*)//;#to remove ! and ^
$read_file{$word1} = $word1;
}
close(FILEA);
Я распечатал ключи в хэше, и он показывает правильный результат (т. Е. Он преобразует FileA в "привет, помогите?", О нет, даОднако, когда я делаю сравнение FileA и FileB, используя следующий код, он всегда терпит неудачу.
while(($key,$value)=each(%config))
{
$num=keys(%base_config);
$num--;#to get the correct index
while($num>=0)
{
$common{$value}=$value if exists $read_file{$key};#stored the correct matches in %common
$num--;
}
}
Я пытался проверить свою подстановку и сравнение между 2 строками, используя следующий пример, и это работает.Я не знаю, почему он не работает для чтения строк в хеш из файла.
use strict;
use warnings;
my $str="hello^vsd";
my $test="hello";
$str =~ s/(!.+)|(!.*)|(\^.+)|(\^.*)//;
my %hash=();
$hash{$str}=();
foreach my $key(keys %hash)
{
print "$key\n";
}
print "yay\n" if exists $hash{$test};
print "boo\n" unless exists $hash{$test};
Оба файла могут иметь разное количество строк текста, и строки текста не обязательно должны быть одинаковымипорядок при поиске, т. е. «о нет» может предшествовать «привет».