Нет необходимости возиться с открытием файловых дескрипторов.Оператор <>
выдаст вам все строки из файлов, переданных в командной строке.Таким образом, ваш код может выглядеть примерно так:
#/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $count;
while (<>) {
$_ = truncate_to_three_cols($_);
# Increment count if the record contains "500"
# Note: \b marks a word boundary. This means we only
# match "500" on its own. Not 1500 or 5000, etc.
$count++ if /\b500\b/;
}
say "I got $count 500s";
Сложная часть - написание функции truncate_to_three_cols()
.Здесь мы не можем помочь, поскольку вы не даете нам никаких подсказок о формате вашего входного файла.Итак, это только пример, если у вас есть файл, разделенный табуляцией.
sub truncate_to_three_cols {
my ($row) = @_;
# Split on tabs
# Take the first three columns
# Join with tabs
return join "\t", (split /\t/, $line)[0 .. 2];
}