my $file = 'C:/tmp.zip'; open F, $file or die $!; read( F, my $buf, 1024 ); close F; print is_text($buf) ? "$file is TEXT\n" : "$file is BIN\n"; # alternatively you can just... print -T $file ? "-T $file is TEXT\n" : "-T $file is BIN\n"; sub is_text { my ($data) = @_; return 0 unless $data; return 0 if $data =~ m![\x00-\x08\x0b\x0e-\x1f]!; return 1; }