Если вы хотите удалить список из символов (в соответствии с вашим названием), то будет работать очень простое регулярное выражение.
В цикле добавьте следующее регулярное выражение
while( <$ADS> ) {
chomp;
s/^[#@ \|]+//;
$ads_list_hash{$lines++} = $_;
}
Обратите внимание, что символ трубы ('|') экранирован.Однако, похоже, что вы хотите удалить список выражений .Вы можете сделать следующее
while( <$ADS> ) {
chomp;
s/^((\|)|(\|\|)|(###)|(##)|(@@\|\|))+//;
$add_list_hash{$lines++} = $_;
}
Вы сказали, что список выражений хранится в массиве или словах.В вашем примере кода вы создаете этот массив с помощью 'qw'.Если список выражений неизвестен во время компиляции, вы можете построить регулярное выражение в переменной и использовать его.
my @strip_expression = ... // get an array of strip expressions
my $re = '^((' . join(')|(',@strip_expression) . '))+';
, а затем использовать следующий оператор в цикле: s / $re //;
Наконец, можно сказать одну вещь, не связанную с вопросом о коде: было бы гораздо более уместным использовать Array вместо Hash, чтобы отобразить целое число в набор строк.Если у вас нет других требований, лучше иметь:
our @ads_list; // no need to initialize the array (or the hash) with empty list
...
while( <$ADS> ) {
chomp;
s/.../;
push @ads_list, $_;
}