use strict;
use warnings;
my $file="t.txt"; #or shift (ARGV); for command line input
my $new_format=undef;
open READ, $file;
local $/=undef; #says to read to end of file
$new_format=<READ>;
$new_format=~ s/\n//g; #replaces all newline characters with nothing, aka removes all \n
close(READ);
open WRITE, ">$file"; #open for writing (overwrites)
print WRITE $new_format;
close WRITE;
Это работает, если предположить, что весь файл является одним большим выражением. Для справки, чтобы удалить все пустое пространство, используйте $new_format=~ s/\s//g;
вместо $new_format=~ s/\n//g;
. Его можно легко модифицировать для учета нескольких выражений. Все, что нужно было бы сделать, переопределить $/
, чтобы быть тем, что вы используете для разделения выражений (например, если просто пустая строка: local $/ = /^\s+$/;
) и бросать все в цикл while. Для каждой итерации нажмите строку в массив и после того, как файл будет полностью обработан, напишите содержимое массива на файл в том формате, который вам нужен.
Это 4 линии. похоже, что вы просто хотите преобразовать новые строки в пробелы. – jordanm
Возможно, вы захотите посмотреть на основной модуль [Text :: Balanced] (http://perldoc.perl.org/Text/Balanced.html), хотя он может быть слишком переполнен для вашей текущей проблемы. –
Я считаю, что мой ответ должен помочь вам. –