我的文件中有一个单词(模型1)20次穿插文字。我想用频率出现次数替换它,例如模型1然后再次发生模型2然后模型3,依此类推。
然而,我的循环在第一轮被卡住并且没有循环直到它已经替换了所有单词。
任何人都可以告诉我我错过了什么。任何帮助将不胜感激。
代码如下:
#!/usr/bin/perl -w
my $file = 'test.text';
open (my $fh, $file);
while (my $row = <$fh>) {
chomp $row;
if (($row) =~ /^MODEL 1/){
$i = 1;
$row =~ s/^MODEL 1/MODEL $i/g;
$i++;
}
print "$row\n";
}
答案 0 :(得分:3)
您需要在循环外移动计数器变量。
作为简化,使用s///e
来匹配和替换一步:
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
my $file = 'test.text';
open my $fh, '<', $file;
my $counter = 0;
while (<$fh>) {
chomp;
s/^MODEL \K1/++$counter/e;
print "$_\n";
}
答案 1 :(得分:1)
将$i = 1
初始化移至while
循环
$i = 1;
while (my $row = <$fh>) { chomp $row;
...
}
您重新将其重置为每一行,因此根本不会发生任何变化。
答案 2 :(得分:1)
您可以使用e修饰符增加替换模式中的计数器:
my $i=1;
while (my $row = <$fh>) {
chomp $row;
$row =~ s/MODEL \K1/$i++/ge
print "$row\n";
}