web-dev-qa-db-ja.com

ファイルがテキストファイルかどうかを確認する方法

Perl6には、Perl5 -T file test のようなものがありますか?

23
sid_com

何も組み込まれていませんが、それを行うモジュール Data :: TextOrBinary があります。

use Data::TextOrBinary;
say is-text('/bin/bash'.IO);                            # False
say is-text('/usr/share/dict/words'.IO);                # True
22

Perl 6に翻訳されていない というヒューリスティックです。 UTF8(またはASCII)で読み取るだけで同じことができます。

given Slurp("read-utf8.p6", enc => 'utf8') -> $f {
    say "UTF8";
}

(read-utf8.p6を、確認するファイルの名前に置き換えます)

10
jjmerelo

次のコードでFile :: Typeを使用できます。

use strict;
use warnings;

use File::Type;

my $file      = '/path/to/file.ext';
my $ft        = File::Type->new();
my $file_type = $ft->mime_type($file);

if ( $file_type eq 'application/octet-stream' ) {
    # possibly a text file
}
elsif ( $file_type eq 'application/Zip' ) {
    # file is a Zip archive
}

ソース: https://metacpan.org/pod/File::Type

4