Я вывожу номера строк из текстового файла всякий раз, когда происходит усечение. Успешно я получаю вывод для большинства усеченных строк.
Однако усеченный вывод строки отличается от 2. Вот что происходит в моем коде:
Rain
, строка, находится в строке 1 входного текстового файла (см. ниже). Применено регулярное выражение s/.{4}\K.*//s
для усечения до 4, а Rain
выходные данные усечены, даже если они не были усечены (Rain
— это 4 символа, их не нужно сокращать). К тому же бывает за 5, s/.{5}\K.*//s
.
Правильно, код выводит усеченную строку при усечении на 3 или меньше.
Как я могу показать, что при использовании s/.{4}\K.*//s
и s/.{5}\K.*//s
не происходит усечения? Другими словами, когда я запускаю свой код для усечения 4 или 5, Rain не отображает вывод усечения для номера строки.
Мой текстовый файл - weather.txt:
Rain
Snow
Вот мой код:
#!/usr/bin/perl
use strict;
use warnings;
my $input = 'weather.txt';
open my $fhIn, '<', $input or die qq(Unable to open "$input" for input: $!);
my @lines;
while( <$fhIn>) {
chomp(@lines);
push @lines, $. if s/.{5}\K.*//s;
}
my $max = @lines;
my $none = '-';
my $fmt = "%-20s\n";
print sprintf($fmt, "Column 1");
foreach my $i (0..$max-1) {
print sprintf($fmt, ($lines[$i] or $none), ($lines[$i] or $none));
}