在IO::Pipe
perl構造函數中使用了什麼參數?Perl中IO :: Pipe構造函數的參數是什麼?
我在文檔中看到的是:
IO ::管::新的可選有兩個參數,應該祝福的對象爲IO ::處理,或者其子類。這兩個對象將用於系統調用管道。如果沒有給出參數,則在新的IO ::管道對象上調用方法句柄。
我真的不明白這意味着什麼。有人可以提供一個例子/解釋嗎?
在IO::Pipe
perl構造函數中使用了什麼參數?Perl中IO :: Pipe構造函數的參數是什麼?
我在文檔中看到的是:
IO ::管::新的可選有兩個參數,應該祝福的對象爲IO ::處理,或者其子類。這兩個對象將用於系統調用管道。如果沒有給出參數,則在新的IO ::管道對象上調用方法句柄。
我真的不明白這意味着什麼。有人可以提供一個例子/解釋嗎?
一旦你學習了面向對象的編程,它就直截了當。請參閱堆棧溢出存檔以獲取適當教材的建議。要遵循下面的解釋,您需要記住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(「duck type」)一樣,即提供文檔中提到的一些方法,而不需要從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
參見man 3p pipe
:
管道()功能必須創建管道和放置兩個文件 描述符,一個每次進參數法爾茲[0]和法爾茲[1], 引用該開讀取和寫入的文件描述結束 管道。
試試看。
děkujuzaodpověďazdravím。:-) – 2012-01-10 09:06:47
這是一個很好的答案,謝謝。我確實知道perl對象的工作方式,但本手冊的確切用詞對我而言並不明確。一旦我有更多的時間,我會閱讀並希望接受答案。 – 2012-01-10 10:16:18