gpt4 book ai didi

perl - Perl 中 IO::Pipe 构造函数的参数是什么?

转载 作者:行者123 更新时间:2023-12-05 00:53:06 25 4
gpt4 key购买 nike

IO::Pipe 中使用的参数是什么? perl 构造函数?

我在文档中看到的是:

IO::Pipe::new optionally takes two arguments, which should be objects blessed into IO::Handle, or a subclass thereof. These two objects will be used for the system call to pipe. If no arguments are given then method handles is called on the new IO::Pipe object.



我真的不明白这意味着什么。有人可以提供一个例子/解释吗?

最佳答案

一旦你学习了面向对象的编程,它就很简单了。请参阅 Stack Overflow 文件以获取适当教材的建议。要遵循以下说明,您需要记住 bless不仅适用于 hashrefs。

你也应该已经完全理解了 pipe 的底层是什么。 POSIX 系统调用,C 和 Perl 中的文件描述符是什么,它可以指向什么,以及 FD 如何在 Perl 中作为 glob 传递。如果这些部分也令人困惑,请打开单独的问题并引用这一问题。

use IO::Pipe qw();
my $pipe = IO::Pipe->new($reader, $writer);

tl;博士版本: $reader$writer预计是文件句柄或其他已打开的文件,很可能来自 open函数或 IO::File 实例。该文档首先提到了 IO::Handle,因为您可能还希望管道不是正确文件的 FD,而是连接到某些进程的标准流(STDIN、STDOUT),为此目的 IO::Handle 就足够了。

详细版本:
$reader$writer变量应包含 IO::Handle 类型的对象实例( $reader 是一个 IO::Handle )。 IO::Handle很少使用,更多的是它的子类 IO::File .
use IO::File qw();
my $reader = IO::File->new('/usr/src/linux/COPYING', 'r');
# bless(*Symbol::GEN0 => 'IO::File')
$reader->fileno
# 6
$reader->can('getline')
# true

use IO::File::WithPath qw();
my $writer = IO::File::WithPath->new('/tmp/foobar', 'w');
$writer->fileno
# 7
$writer->can('print')
# true

由于历史原因,很多不是 IO::Handle 严格子类的东西也可以工作。它们仅仅表现得像 IO::Handle(“鸭子类型”)就足够了,即提供文档中提到的一些方法,而这些方法不需要从 IO::Handle 继承。
open my $other_reader, '<', '/usr/src/linux/COPYING';
# \*{'::$other_reader'}
$other_reader->fileno;
# 8
$other_reader->can('getline');
# false, but works anyway, see http://p3rl.org/IO::Handle#BUGS

use File::Temp qw(tempfile);
my ($other_writer) = tempfile;
# \*{'File::Temp::$fh'}
$other_writer->fileno;
# 9
$other_writer->can('print')
# false, but works anyway, see http://p3rl.org/IO::Handle#BUGS

use IO::String qw();
my $s = IO::String->new("foo\nbar\nbaz");
# bless(*Symbol::GEN1 => 'IO::String')
$s->fileno
# undef
$s->can('getline')
# true

### TODO
use File::Map qw(map_handle);
map_handle my $map, '/boot/vmlinuz'; # ???

### TODO some popen examples

关于perl - Perl 中 IO::Pipe 构造函数的参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798730/

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