read
and sysread
have very similar documentation. What are the differences between the two?
相关问题
- What is the best way to do a search in a large fil
- $ENV{$variable} in perl
- In what practical case bool(std::ifstream) != std:
- Is it possible to pass command-line arguments to @
- Redirecting STDOUT and STDERR to a file, except fo
相关文章
- Running a perl script on windows without extension
- Comparing speed of non-matching regexp
- Can NOT List directory including space using Perl
- Extracting columns from text file using Perl one-l
- Lazy (ungreedy) matching multiple groups using reg
- How do I tell DBD::mysql where mysql.sock is?
- What is a good way to deploy a Perl application?
- Speeding up Selenium Webdriver
About
read
:read
supports PerlIO layers.read
works with any Perl file handle[1].read
buffers.read
obtains data from the system in fixed sized blocks of 8 KiB[2].read
may block if less data than requested is available[3].About
sysread
:sysread
doesn't support PerlIO layers (meaning it requires a raw a.k.a. binary handle).sysread
only works with Perl file handles that map to a system file handle/descriptor[4].sysread
doesn't buffer.sysread
performs a single system call.sysread
returns immediately if data is available to be returned, even if the amount of data is less than the amount requested.Summary and conclusions:
read
works with any Perl file handle, whilesysread
is limited to Perl file handles mapped to a system file handle/descriptor.read
isn't compatible withselect
[5], whilesysread
is compatible withselect
.read
can perform decoding for you, whilesysread
requires that you do your own decoding.read
should be faster for very small reads, whilesysread
should be faster for larger reads.Notes:
These include, for example, tied file handles and those created using
open(my $fh, '<', \$var)
.Before 5.14, Perl read in 4 KiB blocks. Since 5.14, the size of the blocks is configurable when you build
perl
, with a default of 8 KiB.In my experience,
read
will return exactly the amount requested (if possible) when reading from a plain file, but may return less when reading from a pipe. These results are by no means guaranteed.fileno
returns a non-negative number for these. These include, for example, handles that read from plain files, from pipes and from sockets, but not those mentioned in [1].I'm referring to the 4-argument one called by IO::Select.