Обнаружение, если непечатный символ был найден - Perl - PullRequest
0 голосов
/ 14 марта 2012

Моя программа читает в файл, строка за строкой. Но если найден непечатаемый символ (например, символы с десятичным значением меньше 32), я просто хочу вывести сообщение об ошибке на консоль.

Вот что у меня есть

while($line=<FILE>){
print $line;
$line =~ s/^\s+//; #remove leading spaces
$line =~ s/\s+$//; #remove trailing spaces
if(/[\x00-\x1F]/){
    print "Found a non printable!";
}

Я не уверен, работает ли он, потому что, наверное, я не уверен, что в моем файле будет недоступно для печати?

Это мой текущий входной файл:

Pa$$word412
999

Разве возврат каретки не будет напечатан? Тогда не должно ли быть напечатано мое предупреждение?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Вы читаете строку в $line, но не ссылаетесь на это в своем матче.Вам нужно было бы сопоставить $line явно следующим образом:

if ($line =~ /[\x00-\x1F]/) {

Или, что еще лучше, просто поместите свою строку в $_:

while (<FILE>) {
    print;

    s/^\s+//; # remove leading spaces
    s/\s+$//; # remove trailing spaces

    if (/[\x00-\x1F]/) {
        print "WARNING -- Non-printables were found; they have been detected.";
    }
}

Конечные символы новой строки не будут вызывать вашпредупреждение, потому что они соответствуют \s и удаляются после удаления пробела.Если вам нужен тестовый пример, поместите символ табуляции в ваш файл;это должно соответствовать [\x00-\x1F].

1 голос
/ 14 марта 2012

возврат каретки не распечатывается по вашему определению;но вы удаляете возврат каретки из своего ввода, когда говорите

$line =~ s/\s+$//; #remove trailing spaces
...