我有一个名为 Response 的超类:
package Response;
use strict;
use warnings;
use HTML::Template;
sub response {
my ( $class, $request ) = @_;
return $request->new_response( $class->status, $class->headers, $class->body );
}
sub body {
my $class = shift;
my $template = HTML::Template->new( 'filehandle' => eval("$class::DATA") );
return $template->output() . $class;
}
sub status {
return 200;
}
sub headers {
return [ 'Content-Type' => 'text/html' ];
}
1;
__DATA__
Default content
和一个名为 URIError 的子类:
package URIError;
use strict;
use warnings;
use Response;
our @ISA = qw(Response);
1;
__DATA__
Invalid URI
当调用 URIError->response 时,行
my $template = HTML::Template->new( 'filehandle' => eval("$class::DATA") );
在 Response 类中不采用DATAURIError 类中的部分内容。
实现此目的的语法是什么?
如果您更改,您的代码将起作用body
像这样的方法。没有必要eval
: 你所要做的就是禁用strict 'refs'
并取消引用该字符串"${class}::DATA"
sub body {
my $class = shift;
my $data_fh = do {
no strict 'refs';
*{"${class}::DATA"};
};
my $template = HTML::Template->new( filehandle => $data_fh );
$template->output . $class;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)