Зачем использовать RE там?Можно просто сделать ord($_) > 0
, нет?Кроме того, если все, что вам нужно, это пометить, как только вы найдете ненулевой байт, просто прервите его после того, как найдете его, и не беспокойтесь о сканировании остальной части диска:
open DISK, $disk or die $!;
for( 1 .. 1024 ) {
my $buffer = undef;
sysread(DISK, $buffer, 1024, 0) or last;
for ( split //, $buffer ) {
if( ord($_) > 0 ) {
die "Non-zero byte found";
}
}
}