関数順 インデックス
目的別 インデックス

構文
 
 sysread ファイル・ハンドル, SCALAR, LENGTH, データ格納位置
 sysread ファイル・ハンドル, SCALAR, LENGTH
引数 SCALAR
読み込みデータ格納場所
LENGTH
読み込みデータ数

返り値
 
 実際に読み込んだデータ数

説明

  • ファイル・ハンドルからLENGTHバイトのデータを読み込んでSCALARに格納します。
  • 実際に読み込んだバイト数を返します。ファイルの最後で関数を呼び出した場合は0を返します。読み取りエラーが発生した場合は未定義値を返します。
  • データ格納位置を指定するとSCALARにデータを格納する際に指定した分だけ後ろにズラして格納します。省略した場合はSCALARの先頭からデータを格納します。

使用例

ファイルdata.txtからデータを読み込んで出力する
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'data.txt';

my $data;
open my $fh, '<', $filename or die "$!:$filename";
while (1) {
  my $len = sysread $fh, my($buf), 1024;
  unless (defined $len) {
    # 読み取り失敗
    die "read error: $!";
  } elsif ($len == 0) {
    # 読み取り終了
    last;
  }
  $data .= $buf;
}
close $fh;

syswrite STDOUT, $data;
UTF-8のファイルdata.txtから先頭10文字読み込んで出力する
#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'data.txt';
my $size = 10;

open my $fh, '<:utf8', $filename or die "$!:$filename";
my $len = sysread $fh, my($buf), $size;
unless (defined $len) {
  # 読み取り失敗
  die "read error: $!";
}
my $data = $buf;
close $fh;

binmode STDOUT, ':utf8';
syswrite STDOUT, $data, $size;
※ファイル・ハンドルがUTF-8に指定されている場合は読み込みの単位はバイト数ではなく文字数になります