my $bufsize= 4096; my $align= 512; my $buf= 'x' x ($align+$bufsize); my $off= unpack( "J", pack "p", $buf ) % $align; $off= $align - $off if $off; sysread( $FH, $buf, $bufsize, $off ) or ...; my $data= substr( $buf, $off, $bufsize );