Преобразование многострочной строки в массив
Как преобразовать многострочную строку в массив?
my $text= " ads da
sda
s
da
d
as
das
d a as dasd
\n
";
Примечание: я не хочу удалять или удалять новую строку?
5 ответов
Вы можете разделить начало строк, используя ^
метасимвол и тому m
модификатор регулярного выражения ^
соответствовать началу строки, а не только началу строки):
split /^/m, $text
На самом деле, вы можете оставить m
поскольку split
вставляет это для вас в этом случае. От perldoc -f split
: "ШАБЛОН"/^/"обрабатывается так, как если бы он был"/^/m", так как в противном случае он мало используется".
Используя ваше значение для $text
, этот код:
use Data::Dumper;
$Data::Dumper::Useqq=1;
print Data::Dumper->Dump([[split /^/, $text]], ["*text"]);
Печатает это:
@text = (
" ads da\n",
"sda\n",
"s \n",
"da\n",
"d\n",
"as\n",
"\n",
"das\n",
"d a as dasd\n",
"\n",
"\n",
"\n"
);
В нынешнем виде вопрос можно сформулировать более четко.
my @text = split "\n", $text;
Имея в виду, что первый аргумент split
это шаблон:
#!/usr/bin/perl
use strict; use warnings;
use YAML;
my $text = " ads da
sda
s
da
d
as
das
d a as dasd
\n
";
print Dump [ split /(\n)/, $text ];
Выход:
--- - "объявления да" - "\n" - Сда - "\n" - с - "\n" - да - "\n" - г - "\n" - как - "\n" - '' - "\n" - дас - "\n" - да как дасд - "\n" - '' - "\n" - '' - "\n" - '' - "\n"
Мне было весело собрать это вместе: Вуаля! Ваша строка теперь является массивом без split
это
use strict qw<subs vars>;
use warnings;
@{" ads da
sda
s
da
d
as
das
d a as dasd
\n
"} = 1..3
;
Я чувствую, что вы сосредоточены на неправильной проблеме.
Вместо того, чтобы пытаться преобразовать скалярную многострочную строковую константу в список, возможно, ваш вопрос должен звучать так: "Как мне запустить многострочную строку в списке или массиве Perl?"
Посмотрите на конструкторы значений списка Perl в Perldata.
Особая применимость к вашему вопросу заключается в том, как использовать heredoc для запуска массива с многострочной строкой:
#!/usr/bin/perl
use strict; use warnings;
use YAML;
my @text= <<END =~ m/(^.*\n)/mg;
ads da
sda
s
da
d
as
das
d a as dasd
\n
END
print Dump \@text;
Печать:
---
- " ads da\n"
- "sda\n"
- "s \n"
- "da\n"
- "d\n"
- "as\n"
- "\n"
- "das\n"
- "d a as dasd\n"
- "\n"
- "\n"
- "\n"
Используйте идиомы Люк!