Я хочу прокомментировать (на самом деле для печати в разные файлы) диапазон строк в одном файле (DATA), который соответствует другому файлу (rangefile). Rangefile является рядами, то есть, если у меня есть следующие строкиПрокомментировать различные диапазоны значений в файле - Perl
2 4
7 8
Я хочу, чтобы закомментировать матчи 2, 3, 4 и 7, 8 в DATA. То, что я до сих пор это:
#!/usr/bin/perl
use warnings;
use strict;
my $rangefile = $ARGV[0];
open (RANGE, $rangefile) or die "Couldn't open $rangefile: $!\n";
my %hash;
while (<RANGE>) {
my ($begin, $end) = split;;
$hash{$begin} = $end;
}
close RANGE;
my %seen;
while (<DATA>) {
if (/^[^\d]/) { next }
# just split into an array because this file can have several fields
# but want to match 1st field
my @array = split;
foreach my $key (keys %hash) {
my $value = $hash{$key};
if ($array[0] >= $key && $array[0] <= $value) {
unless ($seen{$array[0]} ++) {
print "#$_";
}
}
else {
unless ($seen{$array[0]} ++) {
print;
}
}
}
}
__DATA__
1
2
3
4
5
6
7
8
9
10
Но этот код либо печатает # 2, # 3 и # 4 или # 7 и # 8, но никогда и колеблется вместе. Wanted выход:
1
#2
#3
#4
5
6
#7
#8
9
10
Да, это, кажется, умное решение. – PedroA