문서를 다른 형식으로 변환 한 다음 형식 문서를 기반으로 다른 함수를 호출합니다. 그것은 약간의 정리를 필요로하는 HTML 문서를 제외하고는 모든 것이 꽤나 간단합니다. 그리고 그 정리는 그것이 어디서 왔는지에 따라 다릅니다. 그래서 저는 서브 루틴에 대한 참조를 convert 함수에 전달하여 호출자가 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 });
내가이 라인을 따라 다른 몇 가지를 시도했지만 나는 (대체에 '초기화되지 않은 값의 사용을 받고 계속의 ///) '. 내가하려는 일을하는 어떤 방법이 있을까요?
아래의 답을 읽기 전에 : 각 서브 루틴 수준에서 몇 가지 인쇄 문을 추가하여 인수로 얻는 것이 실제로 생각하는 것과 일치하는지 확인하십시오 가야 해. ** 힌트 : 대체 코드 레터 안의 print 문은 답을 찾으실 것입니다 ** ** – Ether