ファイルを読んでいて、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 文字を明示的に一致させることができます。