Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 使用Perl的select()将打印重定向到STDERR时出现问题,方法在库中被覆盖_Html_Perl_Overriding_Stderr - Fatal编程技术网

Html 使用Perl的select()将打印重定向到STDERR时出现问题,方法在库中被覆盖

Html 使用Perl的select()将打印重定向到STDERR时出现问题,方法在库中被覆盖,html,perl,overriding,stderr,Html,Perl,Overriding,Stderr,我试图从一个Perl库中运行一个特定的子例程,该库在执行时打印大量HTML代码。在做了一些研究之后,我发现可以使用select方法将打印输出临时更改为(比如)STDERR,将其完全隐藏在前端,然后在库完成工作后将其恢复为STDOUT 很简单,但这对我不起作用。出于某种原因,有人在一个关键库中创建了一个方法select,它与上述内容无关,而是一个与数据库交互的方法。因此,每当我尝试使用$filehandler=selectSTDERR;,取而代之的是数据库方法,这会导致一个错误。我不能对这个方法进

我试图从一个Perl库中运行一个特定的子例程,该库在执行时打印大量HTML代码。在做了一些研究之后,我发现可以使用select方法将打印输出临时更改为(比如)STDERR,将其完全隐藏在前端,然后在库完成工作后将其恢复为STDOUT

很简单,但这对我不起作用。出于某种原因,有人在一个关键库中创建了一个方法select,它与上述内容无关,而是一个与数据库交互的方法。因此,每当我尝试使用$filehandler=selectSTDERR;,取而代之的是数据库方法,这会导致一个错误。我不能对这个方法进行注释,也不能将它从库中导出的方法中删除,否则会给其他脚本(包括我正在运行的库)带来太多麻烦

我甚至不能使用HTML块注释来摆脱这个问题,因为库也会打印注释。是否有其他方法可以运行正确的select方法?或者任何其他的替代方法来暂时阻止HTML被打印

编辑:作为参考,我的Perl版本是为x86_64-linux-thread-multi构建的v5.10.1*,正如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函数和所有使用它的代码的好时机,并告诉同事您有多喜欢它们。另外,请注意与主题相关的内容。

如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$字符串的作用。您的输出在该变量上,您甚至可以稍后使用它,或者在使用它之前更改它。