Perl, почему у него есть лишние пробелы в выводе - PullRequest
0 голосов
/ 11 ноября 2018

вход: введите описание изображения здесь

Выход: введите описание изображения здесь

но у моего выхода есть один лишний пробел на последних двух строках. мой вывод: введите описание изображения здесь

мой код:

@content = <FILE>; 

foreach $line (@content){ 
    if($line =~ /^#(\d+)/){ 
        $number = $1; 
        $line =~ s/^#(\d+)/$content[$number-1]/; 
    }
    print "$line"; 
} 

1 Ответ

0 голосов
/ 11 ноября 2018

Вот версия вашего кода с примерами входных данных. Если вы хотите, чтобы люди помогали вам с подобными проблемами, то это хорошая идея, чтобы сделать это как можно проще для них. Размещение изображений ваших входных данных не облегчает. Кроме того, это хороший прием для хранения примеров данных в файловом дескрипторе DATA, чтобы код и данные были вместе в одном файле.

#!/usr/bin/perl

use strict;
use warnings;

my @content = <DATA>;

foreach my $line (@content){
    if($line =~ /^#(\d+)/){
        my $number = $1;
        $line =~ s/^#(\d+)/$content[$number-1]/;
    }
    print "$line";
}

__DATA__
line A
line B
line C
#7
line D
#2
line E

Я также добавил use strict и use warnings в ваш код. В этом случае они не очень помогают, но вы должны привыкнуть включать их в свои программы на Perl.

Ваша проблема здесь:

$line =~ s/^#(\d+)/$content[$number-1]/;

Каждая из строк в вашем массиве @content будет содержать символ новой строки в конце. Но в этой строке вы заменяете символ # и следующую цифру другой строкой из массива. Вы не заменяете исходный символ новой строки, а добавляете еще один символ новой строки (из строки замещения), поэтому строка содержит две строки.

Самое простое решение - добавить новую строку в соответствующий шаблон.

$line =~ s/^#(\d+)\n/$content[$number-1]/;

Обратите внимание, что опытный программист на Perl написал бы ваш код так:

#!/usr/bin/perl

use strict;
use warnings;

my @content = <DATA>;

for (@content){
    s/^#(\d+)\n/$content[$1 - 1]/;
    print;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...