Html 使用Perl的select()将打印重定向到STDERR时出现问题,方法在库中被覆盖
我试图从一个Perl库中运行一个特定的子例程,该库在执行时打印大量HTML代码。在做了一些研究之后,我发现可以使用select方法将打印输出临时更改为(比如)STDERR,将其完全隐藏在前端,然后在库完成工作后将其恢复为STDOUT 很简单,但这对我不起作用。出于某种原因,有人在一个关键库中创建了一个方法select,它与上述内容无关,而是一个与数据库交互的方法。因此,每当我尝试使用$filehandler=selectSTDERR;,取而代之的是数据库方法,这会导致一个错误。我不能对这个方法进行注释,也不能将它从库中导出的方法中删除,否则会给其他脚本(包括我正在运行的库)带来太多麻烦 我甚至不能使用HTML块注释来摆脱这个问题,因为库也会打印注释。是否有其他方法可以运行正确的select方法?或者任何其他的替代方法来暂时阻止HTML被打印 编辑:作为参考,我的Perl版本是为x86_64-linux-thread-multi构建的v5.10.1*,正如a中已经提到的,最明显的解决方案是使用CORE::select。名称空间总是为您提供内置的Html 使用Perl的select()将打印重定向到STDERR时出现问题,方法在库中被覆盖,html,perl,overriding,stderr,Html,Perl,Overriding,Stderr,我试图从一个Perl库中运行一个特定的子例程,该库在执行时打印大量HTML代码。在做了一些研究之后,我发现可以使用select方法将打印输出临时更改为(比如)STDERR,将其完全隐藏在前端,然后在库完成工作后将其恢复为STDOUT 很简单,但这对我不起作用。出于某种原因,有人在一个关键库中创建了一个方法select,它与上述内容无关,而是一个与数据库交互的方法。因此,每当我尝试使用$filehandler=selectSTDERR;,取而代之的是数据库方法,这会导致一个错误。我不能对这个方法进
sub select { 1; }
sub html {
print "<html></html>";
}
open my $string_fh, '>', \my $string or die $!;
my $stdout = CORE::select $string_fh;
html();
CORE::select $stdout;
print "hello world";
顺便说一句,现在可能是重构select函数和所有使用它的代码的好时机,并告诉同事您有多喜欢它们。另外,请注意与主题相关的内容。如a中所述,最明显的解决方案是使用CORE::select。名称空间总是为您提供内置的
sub select { 1; }
sub html {
print "<html></html>";
}
open my $string_fh, '>', \my $string or die $!;
my $stdout = CORE::select $string_fh;
html();
CORE::select $stdout;
print "hello world";
顺便说一句,现在可能是重构select函数和所有使用它的代码的好时机,并告诉同事您有多喜欢它们。另外,请注意,这与主题相关。或者称为文件句柄,它包含资源,而不是不处理事件的文件句柄,或者称为文件句柄,它包含资源,不是文件处理程序它不处理事件让我想起了我需要从%INC删除某些内容的时间,并意识到我们使用vars“%INC”来处理一些奇怪的全局哈希内容,这些内容在.pl文件之间共享产品详细信息…CORE::select对我来说非常有用!我想我不需要为此导入库。现在,如果这看起来像一个愚蠢的问题,很抱歉,但是html的输出到@simbabque哪里去了?我想我必须将它重定向到STDERR,但它不在那里。它被丢弃了吗?@JorgeFreitas你当然可以将它重定向到STDOUT,但你不必这样做。这意味着它会出现在web服务器的错误日志中,而您的系统管理员不会非常喜欢它。我们正在打开一个句柄来写入变量,这就是\my$字符串的作用。您的输出位于该变量上,您甚至可以在以后使用它,或者在使用它之前更改它。这让我想起了我需要从%INC中删除某些内容的时候,并意识到我们使用vars“%INC”来处理一些奇怪的全局哈希内容,这些内容在.pl文件之间共享产品详细信息……CORE::select对我来说非常有用!我想我不需要为此导入库。现在,如果这看起来像一个愚蠢的问题,很抱歉,但是html的输出到@simbabque哪里去了?我想我必须将它重定向到STDERR,但它不在那里。它被丢弃了吗?@JorgeFreitas你当然可以将它重定向到STDOUT,但你不必这样做。这意味着它会出现在web服务器的错误日志中,而您的系统管理员不会非常喜欢它。我们正在打开一个句柄来写入变量,这就是\my$字符串的作用。您的输出在该变量上,您甚至可以稍后使用它,或者在使用它之前更改它。