我想使用PERL从每行中删除n个字符。
例如,我有以下输入:
catbathatxx(长度11; 11%3 = 2个字符)(从此行中删除2个字符)
mansunsonx(长度10; 10%3 = 1个字符)(从此行删除1个字符)
#!/usr/bin/perl -w
open FH, "input.txt";
@array=<FH>;
foreach $tmp(@array)
{
$b=length($tmp)%3;
my $c=substr($tmp, 0, length($tmp)-$b);
print "$c\n";
}
我想输出最后一个字符串(删除字符后)。
但是,该程序未给出正确的结果。你能告诉我这个错误是什么吗?
非常感谢。如果有任何疑问/澄清,请告诉我。
答案 0 :(得分:1)
我假设尾随空格不重要。
#!/usr/bin/env perl
use strict; use warnings;
use constant MULTIPLE_OF => 3;
while (my $line = <DATA>) {
$line =~ s/\s+\z//;
next unless my $length = length $line;
my $chars_to_remove = $length % MULTIPLE_OF;
$line =~ s/.{$chars_to_remove}\z//;
print $line, "\n";
}
__DATA__
catbathatxx
mansunsonx
0123456789
012345678
答案 1 :(得分:1)
\K
正则表达式序列使这更加清晰;它是在Perl v5.10.0中引入的。
代码看起来像这样
use 5.10.0;
use warnings;
for (qw/ catbathatxx mansunsonx /) {
(my $s = $_) =~ s/^ (?:...)* \K .* //x;
say $s;
}
<强>输出强>
catbathat
mansunson
答案 2 :(得分:0)
一般情况下,您希望发布 获取的结果。那就是说......
文件中的每一行在其末尾都有\n
(或\r\n
窗口),而您没有考虑到这一行。你需要chomp()
这一行。
编辑添加:我的perl因不使用而变得生锈但是如果内存对我有用,那么在阅读文件后您实际上可以chomp()
整个数组:chomp(@array)
答案 3 :(得分:0)
您应该在数组上使用chomp(),如下所示:
@array=<FH>;
chomp(@array);
答案 4 :(得分:0)