我正在尝试读取如下所示的文件:
> SOME HEADER
ABCDEFGHIJKLMNOP
QRSTUPWXYZ123456
我需要能够读取字符 A、B、C、D 等。每个字符,所以我正在使用这个循环:
while (read $file, my $char, 1){
print $char;
print $.;
print "nn";
}
但问题是,我需要跳过"一些标题"。我需要跳过它,不是因为它是第一行,而是基于有一个"> SOME HEADER"子字符串。
打印 $. 始终输出"6",即使它不是正确的行号。
open my $file,"<","file.txt";
<$file>; #Removing first line
while (read $file, my $char, 1)
{
print $char;
}
或者设置标志并检查它
my $flag = 0;
while (read $file, my $char, 1)
{
$flag = 1 and next if(($char =~m/n|rn/) && ($flag == 0));
next if $flag == 0;
print $char;
}
逐行处理然后逐个字符处理不是更容易吗?
use strict;
use warnings;
while (<DATA>) {
chomp;
next if /^> SOME HEADER/;
for my $char (split(//)) {
print "$char $.n";
}
}
__DATA__
> SOME HEADER
ABCDEFGHIJKLMNOP
QRSTUPWXYZ123456
输出:
A 2
B 2
C 2
...
4 3
5 3
6 3