У меня есть функция для преобразования документов в разные форматы, которая затем вызывает другую функцию на основе документа типа. Это довольно просто для всего, кроме HTML-документов, которые требуют небольшой очистки, и эта очистка зависит от того, откуда она взялась. Итак, у меня возникла идея, что я могу передать ссылку на подпрограмму в функцию преобразования, чтобы у вызывающего абонента была возможность изменить HTML, примерно так (я не на работе, поэтому это не копия и вставка) :
package Converter;
...
sub convert
{
my ($self, $filename, $coderef) = @_;
if ($filename =~ /html?$/i) {
$self->_convert_html($filename, $coderef);
}
}
sub _convert_html
{
my ($self, $filename, $coderef) = @_;
my $html = $self->slurp($filename);
$coderef->(\$html); #this modifies the html
$self->save_to_file($filename, $html);
}
который затем вызывается:
Converter->new->convert("./whatever.html", sub { s/<html>/<xml>/i });
Я пробовал несколько разных вещей в этом направлении, но я продолжаю получать «Использование неинициализированного значения в замене (s///)». Есть ли способ сделать то, что я пытаюсь сделать?
Спасибо