如何阻止 perl 消息“不推荐使用 XXX 使用 YYY”转至标准错误?

Bul*_*ush 2 bash perl cron

系统:

  • Ubuntu 18.04 和 Perl 5.26。
  • 我使用 alpine 来接收来自 cron 的电子邮件,主要是发送到 stderr 的消息。
  • 搜索网页没有任何答案。所以我来了。

情况:

  • 我有一个主要的 Perl 程序,它就像一个 listserv 程序,它登录到一个电子邮件帐户并处理每封电子邮件中的电子邮件命令,并根据电子邮件中的命令确定要运行的程序。类似 listserv 的程序和被调用的程序都使用一个名为 util2.pl 的库例程列表。util2.pl必须使用 Mail::Sender,因为我无法在我们的 Perl 中使用更新的电子邮件发送程序,即使在搜索页面等之后。所以现在,我们必须使用 Mail::Sender。
  • util2.pl通过 包含在链中的每个程序中require /path/to/util2.pl
  • 我运行类似 listserv 的程序,它通过 bash 文件和 cron 检查电子邮件。因此,每次 bash 文件运行类似 listserv 的程序时,我都会收到此错误消息到 stderr “Mail::Sender is deprecated...”。
  • 在我的由 cron 运行的 bash 文件中,我尝试过,perl /path/to/program.pl bunch of arguments 2>/tmp/stderr.txt但我仍然收到一封来自 cron 的电子邮件,其中包含此错误消息。也就是说,我每周都会每 10 分钟收到一封包含此错误消息的电子邮件。我最终收到了数千封包含此消息的电子邮件。

问题:

  1. 如何让此消息停止输出?是否有 perl 设置来防止这条消息?我希望弹出其他消息,例如如果我有一个未定义的变量,某事正在对非数字变量进行数字比较等。我只想禁用这个“废话已被弃用”的消息到标准错误。
  2. 或者,我可以设置某种过滤器来删除任何包含错误消息的消息吗?我对高山过滤器一无所知。

非常感谢,这让我很头疼。

cho*_*oba 11

警告来自这一行:

warnings::warnif('deprecated', 'Mail::Sender is deprecated and you should look to Email::Sender instead');
Run Code Online (Sandbox Code Playgroud)

如果您查看警告,您会看到可以通过以下方式关闭类别

no warnings 'deprecated';
Run Code Online (Sandbox Code Playgroud)

所以,包装use Mail::Sender

{   no warnings 'deprecated';
    use Mail::Sender;
}
Run Code Online (Sandbox Code Playgroud)

或者直接注释掉该行。

不过,正确的解决方案是切换到 Email::Sender。无论您实施什么 hack,请考虑并计划真正的修复,即停止使用已弃用的库。

  • @Bulrush:是的,“警告”效果的词法范围是块或文件。但是,通过在块中加载“Mail::Sender”模块,您可以消除警告并且该模块可供您使用。任何其他尝试加载它的地方都会看到它已经加载并且不会给您警告。 (2认同)