簡體   English   中英

Perl如何知道從IO :: Select ::-> can_read的句柄中讀取多少字節?

[英]How does Perl know how many bytes to read in a handle from IO::Select::->can_read?

我正在使用IO::Selectcan_read方法來選擇准備在簡單的perl腳本中讀取的文件句柄。

但是,文件句柄上的<...>運算符不需要將長度傳遞給它。

IO::Select到達文件句柄內部以設置“適當的長度” ...還是發生了什么?

#!/usr/bin/env perl
use IO::Select;
use strict;
use warnings;

my @handles = IO::Select->new(\*STDIN)->can_read(3);

@handles == 1 or die;

my $handle = $handles[0];

print ("I read " . <$handle> . "\n");

例如,以下腳本立即打印"a\\n" ,然后在三秒鍾后退出。

% sh -c 'echo a; sleep 5; echo b' | perl reader.pl
I read a

Exit 141

然后由於某種奇怪的原因而異常退出……不確定退出狀態在哪里設置。

編輯:明顯的異常退出似乎是tcsh中的錯誤。

IO :: Select都不知道長度, <...>運算符或readline函數也不知道。 取而代之的是,它將嘗試讀取直到行末的內容。 如果未找到行尾字符(即$/ ),則在非阻塞文件句柄的情況下,它將僅返回所有可用數據;在阻塞文件句柄的情況下,將等待至行尾或數據結尾。

在您的特定情況下, echo a; sleep 5; echo b echo a; sleep 5; echo b echo a; sleep 5; echo b導致a\\n而5秒后返回b\\n 由於您的代碼在標量上下文中使用<..> ,因此它將僅讀取一行。 這意味着它將在找到第一行結束后停止並返回此行,從而導致a\\n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM