gpt4 book ai didi

perl - 在 perl 中,\*STDIN 与 STDIN 相同吗?

转载 作者:行者123 更新时间:2023-12-05 09:00:54 27 4
gpt4 key购买 nike

我是 Pythonizer 的作者我正在尝试将 CGI.pm 的代码从标准 perl 库转换为 Python。我在 read_from_client 中看到这段代码:

read(\*STDIN, $$buff, $len, $offset)

\*STDINSTDIN 相同?我不明白他们为什么这样使用它。感谢您的帮助!

该模块还引用了 \*main::STDIN - 这和 STDIN 一样吗?也是(我会在 python 中将普通的 STDIN 翻译成 sys.stdin)? Code :

foreach my $fh (
\*main::STDOUT,
\*main::STDIN,
\*main::STDERR,
) { ... }

最佳答案

与其逐行翻译 CGI.pm,我建议您了解接口(interface),然后执行 Python 会为此做的任何事情。或者,更好的是,忘记它的存在。通常看起来翻译将是一个直接的替代品,但由于您将在新语言中使用的库和结构非常不同,您只会产生新的错误。既然你无论如何都会制造新的错误,那么你不妨做一些更聪明的事情。

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

你正在看:

# 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 中做任何你需要做的来满足接口(interface)。给定缓冲区和长度,从文件句柄中获取更多数据。由于您没有处理 mod_perl(我猜,因为您会怎么做?),您可以忽略那里的大部分内容。


\*main::STDIN\*STDIN 是对 typeglob 的引用,这是一种跟踪所有具有相同名称(标量)的 Perl 变量的方法、数组、散列、子例程、文件句柄和其他一些)。 STDIN 标识符是一个特殊情况变量,默认情况下为 main,因此在前面添加包 main:: 可能只是为了让开发人员感到舒适。

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

您将此视为传递命名的标准文件句柄的一种方式。

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

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

关于perl - 在 perl 中,\*STDIN 与 STDIN 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74678226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com