![/usr/share/perl5/Net/Server/Fork.pm 第 168 行,在数字等式 (==) 中使用未初始化的值](https://linux22.com/image/783645/%2Fusr%2Fshare%2Fperl5%2FNet%2FServer%2FFork.pm%20%E7%AC%AC%20168%20%E8%A1%8C%EF%BC%8C%E5%9C%A8%E6%95%B0%E5%AD%97%E7%AD%89%E5%BC%8F%20(%3D%3D)%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9C%AA%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%E5%80%BC.png)
在我的新 Debian Bookworm 上,/usr/share/perl5/Net/Server/Fork.pm
每次 Munin 调用该文件时,都会在日志中生成错误。记录的错误是
“在 /usr/share/perl5/Net/Server/Fork.pm 第 168 行,数字等式 (==) 中使用了未初始化的值。”
在 Debian Bullseye 中,没有错误。
顺便说一下,两个版本之间的区别如下:
5c5
< # Copyright (C) 2001-2017
---
> # Copyright (C) 2001-2022
146a147
> $self->register_child($pid, 'fork');
167c168
< if (SOCK_DGRAM == $sock->getsockopt(SOL_SOCKET,SO_TYPE)) {
---
> if (SOCK_DGRAM == unpack('i', $sock->getsockopt(SOL_SOCKET, SO_TYPE))) {
第 168 行是最后一个差异,问题就发生在这里。
我不懂 Perl,那么我该如何解决这个问题并将错误报告给 Perl 包所有者?
答案1
看起来这个问题已经报告给了github perl-net-server 问题 32。您可以添加自己的分析,看看是否能引起更好的关注。
我没有看到中央 Perl 错误跟踪系统所以你可能想把它添加到那里。如果是这样,请包含指向 github 问题的链接。
修复此问题的代码应该非常简单:
my $sockopt = unpack('i', $sock->getsockopt(SOL_SOCKET, SO_TYPE));
if (defined $sockopt and SOCK_DGRAM == $sockopt) {
假设变量名未在代码附近使用。