syswrite

ファイルハンドルに固定長の未バッファデータを出力する

構文

解説

syswrite は、ファイルハンドル FILEHANDLE に、現在のファイルポインタの位置からスカラー変数 SCALAR のデータのうち LENGTH バイトだけ書き込みます。 LENGTH が指定されなければ、SCALAR のすべてのデータが書き込まれます。 そして、syswrite は、実際に書き込んだデータのバイト数を返します。 もし何かしらのエラーが発生したなら undef が返されます。 その場合、そのエラー内容は $! にセットされます。

# 符号なし 8 ビット整数 (unsigned char) としてバイナリーデータを生成
my $data = pack( 'C5', 10, 11, 12, 13, 14 );    # 0A 0B 0C 0D 0E
open my $fh, '>', './sample.bin';
syswrite $fh, $data, 3;    # $data の先頭から 3 バイト分の 0A 0B 0C が書き込まれる

OFFSET を指定すると、SCALAR の先頭から OFFSET バイトより後ろのデータのみが書き込まれます。

syswrite $fh, $data, 3, 1;   # 0B 0C 0D が書き込まれる

なお、Perl 5.30 以降は、:utf8 ハンドルで syswrite を使うと 例外を投げますので注意してください。 [perldeprecation]

open my $fh, '>:utf8 ', './sample.bin';
syswrite $fh, $data;   # エラーになる