如何解决在 /opt/alu-rp/www/cgi/munin-cgi-html 调用的未定义子程序 &main::header
我正面临错误“未定义的子程序 &main::header 在 /opt/alu-rp/www/cgi/munin-cgi-html 第 54 行调用。”同时打开munin页面(http://localhost/munin)
Perl 版本:v5.32.0 穆宁版本:v2.0.65
出现错误,由于在munin-cgi-html中添加了新条件,因此无法看到标头
# grab config
html_startup(\@params);
while(new CGI::Fast){
print header("text/html");
$config = get_config(1);
show_page();
}
:
:
# CGI in perl 5.20 is now seriously broken as it doesn't import into the namespace.
# So we have to delegate explicitly. It's easier than prefixing with CGI:: each use.
# This workaround is applied only if "header" is undefined (i.e. for perl >= 5.20).
if(!defined &header){
*header = sub { return CGI::header(@_); };
*path_info = sub { return CGI::path_info(@_); };
*url = sub { return CGI::url(@_); };
*script_name = sub { return CGI::script_name(@_); };
}
在 munin-cgi-html 中添加一行即可解决问题。
sub header { return CGI::header(@_); }
但不确定添加此行会产生什么影响。 是否需要安装任何特定的配置或包才能让 Munin 工作?
解决方法
底部的块是从 CGI 导入符号。不幸的是,您在执行此块以导入它之前尝试使用 header
。您需要在所有使用 header
等之前执行导入。
注意
*header = sub { return CGI::header(@_); };
最好写成
*header = \&CGI::header
因为它避免了不必要的额外子调用。
请注意,您可以要求 CGI.pm 为您导出这些符号。您可以简单地使用以下任一方法,而不是手动导入符号:
use CGI qw( header path_info url script_name );
use CGI qw( :cgi );
无需自己笨拙地导入符号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。