检测是否找到了不可打印的字符 - Perl

时间:2012-03-14 16:53:27

标签: perl file character

我的程序正在逐行读取文件。但是如果找到一个不可打印的字符(例如十进制值小于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 个答案:

答案 0 :(得分:2)

您正在阅读$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 :(得分:1)

根据您的定义,回车符不可打印;但是当你说

时,你正在从输入中删除回车
$line =~ s/\s+$//; #remove trailing spaces