ファイルハンドルに固定長の未バッファデータを出力する
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; # エラーになる