在任何文件中打印 Perl 警告而没有“使用警告”或 -w

2023-12-07

我有很多经常被调用的旧 Perl 代码,我一直在编写一个新模块,突然间我在 Apache 的 error_log 中收到很多警告,它们针对当前正在使用的每个模块。例如,

"my" variable $variable masks earlier declaration in same statement at
    /path/to/module.pm line 40 (#1)

Useless use of hash element in void context at
    /path/to/another/module.pm line 212 (#2)

代码库的主要布局是一个巨大的脚本,其中包括模块并将为网站创建某些页面所需的请求定向到它们,然后主脚本处理菜单等静态元素。

我当前的项目与此主脚本分离,并且不使用它,但是每当我使用 ajax 调用我的代码时,还有一些其他 ajax 调用将使用主脚本,并且警告似乎仅在这些请求中出现,但仅在以下情况下出现:我正在调用我的项目。

我已经 grep 了每个模块,但它们中没有一个使用警告(或 -w),我也尝试在主脚本和我自己的项目中使用无警告“全部”,但它没有做任何事情。

此时,我不知道下一步该做什么,因此感谢所有帮助,我只想抑制警告,代码库相当旧且写得不好,因此要纠正导致警告的每个问题第一名是不可能的。

Apache 服务器也运行 mod_perl,如果这可能会产生影响,我感觉这可能与 CGI 有关,但我似乎找不到任何证据。


我认为代码是通过运行某些顶级 Perl 脚本来调用的。

然后使用__WARN__挂钩这些脚本以停止打印警告

BEGIN { $SIG{__WARN__} = sub {} };

放置这个BEGIN之前的块use语句也会影响模块。

空子例程是静音警告的方法,因为__WARN__不支持'IGNORE'.

See warn and %SIG在佩尔瓦尔. See 这个帖子 and 这个帖子获取评论和一些示例。


要进一步调查并跟踪您可以使用的警告Carp

BEGIN {
    $SIG{__WARN__} = \&Carp::cluck;  # or Carp::confess; to also die
}

这将使它打印完整的堆栈跟踪。这可以根据您的需要进行微调,因为我们可以编写自己的子程序来调用。或者使用鲤鱼::永远.

See 这个帖子采取一些更严厉的措施(例如推翻核心::全球::警告)

一旦找到更精确的级别来抑制警告,那么local $SIG{__WARN__}如果可能的话,这是可行的方法。这在上面链接的帖子中使用,这里是另一个例子。当然,只在需要的地方而不是到处抑制警告要好得多。

更多详情

  • 在 Perl 中获取堆栈跟踪?

  • 如何获得 Perl 中的调用堆栈列表?

注意longmess不幸的是不再那么标准和得到很好的支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在任何文件中打印 Perl 警告而没有“使用警告”或 -w 的相关文章

  • 匹配有限自然数列

    我怎样才能匹配有限自然数 http en wikipedia org wiki Natural number正则表达式系列 所以 要求是 字符串包含数字和空格 作为分隔符 第一个数字是1 每个数字 第一个数字除外 等于前一个数字 1 应该是
  • 如何制作将 HTML 文件加载到 div 中的 XMLHttpRequest?

    我正在尝试做一个XMLHttpRequest从外部文件加载 HTML 并将文件内容插入到div 当我运行该函数时 它会在所有正文中插入 HTML 这是不够的 My code gt HTML
  • 使用 AJAX 调用生成 PDF 文件

    我正在尝试使用 Rails3 中的 AJAX 调用生成 PDF 文件 以下代码生成一个我使用 PRAWN gem 创建的 PDF 文件 我不希望用户在订购之前查看 PDF 因此 目标是在服务器中创建 PDF 文件 非常感谢任何想法或想法 使
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • 如何从 facebook javascript SDK 获取个人资料图片?

    我正在尝试从 Facebook 获取个人资料图片 现在我正在从 Facebook 获取所有信息 但无法获取用户的个人资料照片 这是我的代码 function getFBData FB api me function response fbi
  • jQuery ajax表单多次提交

    我在使用 jQuery ajax 表单提交多个表单时遇到一些问题 我通过在服务器上打印表单提交的每个实例发现了这一点 并发现表单会正确提交一次 然后再次提交多次 需要明确的是 这段代码在第一次提交时可以 100 正确运行 但是当我单击表中的
  • 在ajax上下文中使flask中的会话过期

    我在用permanent session lifetime在一段时间不活动后使用户会话过期 问题是 这个请求是通过 ajax 发出的 所以我无法在 ajax 上下文中以 Flask 的正常行为进行重定向 http xxxx login ne
  • ajax 请求中的 laravel TokenMismatchException

    我正在使用资源组并使用此过滤器来解析TokenMismatchException问题 Route filter csrf function route request if strtoupper request gt getMethod G
  • 在 Django 中 AJAX 发布后重定向

    我使用 Django 的内置 DeleteView 并为success url属性 现在在我的模板中 我通过 JQuery 的 post 方法触发此视图 当该项目被删除时 我不会被重定向到success url 经过一番查找 发现好像是AJ
  • Rails 3:使用 AJAX 请求更新 URL 参数

    我有一个过滤器和一个产品列表 id 名称 创建日期 我可以按 ID 名称或创建日期进行过滤 通过 AJAX 请求 我更新了内容 div 但显然 URL 没有改变 如何将参数附加到 URL 例如 localhost 3000 dashboar
  • python 3.8 Flask apache 2.4 wsgi 多重处理运行时错误:子解释器不支持 fork

    我正在尝试在 Ubuntu 20 04 中使用 python 3 8 flask wsgi 并使用多处理来运行代码 我写了一段代码 在 python 中运行得很好 这是代码 from flask import Flask from mult
  • Perl 中如何释放内存?

    我的代码如下所示 my var my var new while 1 while my k v each var a sub v var A map var var new keys var new var new B sub a sub
  • 在 CGI 模式下运行时如何覆盖 PHP 配置

    有一些教程告诉我如何在 CGI 模式下运行时覆盖 PHP 配置 但我仍然很困惑 因为很多人都认为服务器运行在 Linux 上 虽然我需要这样做also在 Windows 上 我的主机确实使用 Linux 但我的本地开发计算机使用 Windo
  • 如何在正则表达式中匹配“/*”?

    stuff d learning perl tmp txt open STUFF stuff or die Cannot open stuff for read while
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 我找不到 poi-ooxml-schemas 的源代码存储库

    好吧 这有点奇怪 我已经从以下位置查看了 apache poi 版本 3 9 源代码http archive apache org dist poi release src http archive apache org dist poi
  • 如何在 gridview 内添加级联下拉菜单以进行编辑?

    我有一个相当标准的 ASP NET GridView 它显示具有父子关系的 2 列 尽管数据库中存在 A 列和 B 列之间的关系 但 GridView 并未实现它 我想做以下事情 当用户选择编辑该行时 将显示 2 个下拉菜单 DropDow
  • 找出 Jquery ajax 请求被重定向到的位置

    所以 我收到了这个ajax请求 请参阅 金发女郎 大约6英尺高 看起来像这样 ajax url http example com makeThing dataType html type POST data something someot
  • 如何跨页面播放背景音乐

    我已经读过这个问题 我知道它只能用框架来完成 我真的不想要全站点 AJAX 如何在多个 HTML 页面上播放背景音频 https stackoverflow com questions 4210370 how to play a backg
  • Perl 中的布尔函数应该返回什么值?

    简短的问题 在 Perl 代码库中一致表示真假的最佳方法是什么 1 0 1 Perl 原生布尔运算符的特殊空字符串 return undef 即空列表 问题背景 我们都知道 Perl 在布尔值方面非常灵活 就像大多数事情一样 例如 Perl

随机推荐