首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中,STDIN与STDIN相同吗?

在perl中,STDIN与STDIN相同吗?
EN

Stack Overflow用户
提问于 2022-12-04 15:50:34
回答 2查看 48关注 0票数 1

我是化油器的作者,我正在尝试将CGI.pm的代码从标准的perl库转换为Python。我在客户端中看到了这段代码

代码语言:javascript
复制
read(\*STDIN, $$buff, $len, $offset)

\*STDINSTDIN是一样的吗?我不明白他们为什么用这种方式。谢谢你的帮忙!

该模块还引用了\*main::STDIN --这与STDIN也是一样的(我会在python中将普通的STDIN转换为sys.stdin )?代码

代码语言:javascript
复制
foreach my $fh (
    \*main::STDOUT,
    \*main::STDIN,
    \*main::STDERR,
) { ... }
EN

回答 2

Stack Overflow用户

发布于 2022-12-04 16:46:41

与其逐行转换CGI.pm行,我建议您理解接口,然后做任何Python会做的事情。或者,更好的是,忘记它的存在。翻译似乎常常是一种替代,但由于您将在新语言中使用的库和结构非常不同,所以您只会产生新的bug。既然你要制造新的bug,你最好做些更聪明的事情。

但是,我对你的情况一无所知,所以让我们谈谈字面上的问题。

你看到的是:

代码语言:javascript
复制
# Read data from a file handle
sub read_from_client {
    my($self, $buff, $len, $offset) = @_;
    local $^W=0;                # prevent a warning
    return $MOD_PERL
        ? $self->r->read($$buff, $len, $offset)
        : read(\*STDIN, $$buff, $len, $offset);
}

与其担心Perl代码,不如在Python中做任何您需要做的事情来满足接口。给定缓冲区和长度,从文件句柄获取更多数据。由于您没有处理mod_perl (我猜,因为您将如何处理?),您可以忽略那里的大部分内容。

\*main::STDIN\*STDIN是对类型same的引用,这是一种跟踪所有同名的Perl变量的方法(标量、数组、哈希、子例程、文件句柄等)。STDIN标识符是一个特例变量,默认情况下是main,因此在前面添加包main::可能只是开发人员的安慰。

当您在希望处理文件句柄的地方使用这些引用时,将使用类型glob的文件句柄部分。它只是一种传递标识符STDIN并让其他东西将其用作文件句柄的方法。

您认为这是传递命名的标准文件句柄的一种方式。

read接受一个文件句柄(或对typeglob的引用)作为其第一个参数。

在python中,您会做类似于sys.stdin.read(...)的事情。

票数 3
EN

Stack Overflow用户

发布于 2022-12-04 17:05:13

通常可以使用以下文件句柄:

  • IO对象(*STDIN{IO})
  • 包含IO对象(*STDIN)的全局
  • 对包含IO对象(\*STDIN)的glob的引用
  • 包含IO对象("STDIN")的glob名称。

期望文件句柄的内置操作符允许您在提供glob时省略*。例如,read( FH, ... )的意思是read( *FH, ... )

期望文件句柄的内置函数应该接受所有这些。所以你可以做以下任何一件事:

  • read( *STDIN{IO}, ... )
  • read( STDIN, ... )
  • read( *STDIN, ... )
  • read( \*STDIN, ... )
  • read( "STDIN", ... )

它们将产生同样的效果。

第三方库可能接受全局和对全局的引用,它们也应该期望IO对象。我希望对将名称作为字符串提供的支持最少。你的里程可能会不同。

对glob (\*FH)的引用不会出错,因为这是open( my $fh, ... )产生的结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74678226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档