sysread


sysread FILEHANDLE, SCALAR, LENGTH, OFFSET
sysread FILEHANDLE, SCALAR, LENGTH

 FILEHANDLEからLENGTHバイト読み込みSCALARに格納します。読み込みにはシステムコールのread(2)を利用します。
 実際に読み込んだバイト数を返します。EOFの場合は0を、読み込みに失敗した場合は未定義値を返します。
 SCALARの先頭以外に書き込む場合はOFFSETを指定します。指定した位置から書き込みを行います。
 バッファリングを行いません。
 ソケットから読み込む場合、到達しているデータがLENGTHバイト未満の場合でも到達している分のデータを読み込みます。readを使うとLENGTHバイト到達するかデータが終了するまで待ちます。

サンプルプログラム

use strict;
use warnings;

my $filename = 'data.txt';

my $doc = '';
open my $fh, '<', $filename or die "$!:$filename";
while (1) {
    my $len = sysread $fh, my($buf), 1024;
    die "read error: $!" unless defined $len;
    last if $len == 0;
    $doc .= $buf;
}
close $fh;

binmode STDOUT;
print $doc;

関連項目

read関数
・syswrite関数