ファイルを読んでいて、Unicode NULL、 U+0000を持つ行をスキップする方法を知りたいですか? 以下のすべてを試しましたが、どれも機能しません。
if($line)
chomp($line)
$line =~ s/\s*$//g;
「すべて」のリストには、明らかな$line =~ m/\000/
.
Unicode NULL( UTF-8でエンコードされた場合はASCII NULと同じ)について質問したので、 perlunicodeのドキュメント\N{U+...}
で説明されている形式を使用してみましょう。
\N{U+...}
表記を使用して、Unicode文字を文字列に追加することもできます。目的の文字のUnicodeコード(16進数)は、中括弧内の。の後に配置する必要がありますU
。たとえば、スマイリーフェイスは\N{U+263A}
です。
正規表現で対戦することもできます\N{U+...}
。下記参照。
#! /usr/bin/env perl
use strict;
use warnings;
my $contents =
"line 1\n" .
"\N{U+0000}\n" .
"foo\N{U+0000}bar\n" .
"baz\N{U+0000}\n" .
"\N{U+0000}quux\n" .
"last\n";
open my $fh, "<", \$contents or die "$0: open: $!";
while (defined(my $line = <$fh>)) {
next if $line =~ /\N{U+0000}/;
print $line;
}
出力:
$ ./filter-nulls ライン1 過去
Perl 文字列には、NUL 文字を含む任意のデータを含めることができます。true またはfalseif
のみをチェックします (ここで""
、 と"0"
は 2 つの false 文字列で、単一の NUL "\x00" を含む文字列を含む他のすべては true です)。NULchomp
ではなく、行区切りのみを削除します。NUL 文字は空白ではないため、一致しません\s
。
8 進表記または 16 進表記 (それぞれ"\000"
または"\x00"
) を使用して正規表現で指定することにより、NUL 文字を明示的に一致させることができます。