Предположим, что две строки текста соответствуют друг другу слово за словом, за исключением знаков пунктуации. Как мне сделать их вертикальное выравнивание?
Например:
$line1 = "I am English in fact";
$line2 = "Je suis anglais , en fait";
Я хочу, чтобы вывод был таким:
I am English in fact
Je suis anglais , en fait .
Я придумал следующий код, основанный на том, что я узнал из ответов на мои предыдущие вопросы, опубликованные в SO, и раздела «Форматированный вывод с printf» Learning Perl.
use strict;
use warnings;
my $line1 = "I am English in fact";
my $line2 = "Je suis anglais , en fait.";
my @array1 = split " ", $line1;
my @array2= split " ", $line2;
printf "%-9s" x @array1, @array1;
print "\n";
printf "%-9s" x @array2, @array2;
print "\n";
Это не удовлетворяет. Вывод такой:
I am English in fact
Je suis anglais , en fait.
Может кто-нибудь любезно дать мне несколько советов и предложений по решению этой проблемы?
Спасибо:)
Обновлено
@ ysth отправил меня на правильный путь! Еще раз спасибо :) Поскольку я знаю, как выглядит моя собственная дата, для этого примера все, что мне нужно сделать, это добавить следующую строку кода:
for ( my $i = 0; $i < @Array1 && $i < @Array2; ++$i ) {
if ( $Array2[$i] =~ /,/ ) {
splice( @Array1, $i, 0, '');
}
}
Learning Perl кратко упоминает, что функция сплайсинга может использоваться для удаления или добавления элементов в середине массива. Спасибо, я снова расширил свой запас знаний Perl:)