Преобразование многострочной строки в массив - PullRequest
0 голосов
/ 19 ноября 2010

Как преобразовать многострочную строку в массив?

my $text= " ads da
sda
s 
da
d
as

das
d a as dasd
\n

";

Примечание: я не хочу удалять или удалять перевод строки?

Ответы [ 5 ]

21 голосов
/ 19 ноября 2010

В нынешнем виде вопрос можно сформулировать более четко.

my @text = split "\n", $text;
13 голосов
/ 19 ноября 2010

Вы можете разбить начало строк, используя метасимвол ^ и модификатор m regexp (позволяя ^ соответствовать началу строки, а не только началу строки):

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"
        );
2 голосов
/ 19 ноября 2010

Помня, что первый аргумент 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 ];

Выход:

---
- ' ads da'
- "\n"
- sda
- "\n"
- s
- "\n"
- da
- "\n"
- d
- "\n"
- as
- "\n"
- ''
- "\n"
- das
- "\n"
- d a as dasd
- "\n"
- ''
- "\n"
- ''
- "\n"
- ''
- "\n"
1 голос
/ 20 ноября 2010

Мне было весело собрать это вместе: Вуаля! Ваша строка теперь представляет собой массив без split -ting it:

use strict qw<subs vars>;
use warnings;

@{" ads da
sda
s 
da
d
as

das
d a as dasd
\n
"} = 1..3
;
1 голос
/ 19 ноября 2010

Я чувствую, что вы сосредоточены на неправильной проблеме.

Вместо того, чтобы пытаться преобразовать скалярную многострочную строковую константу в список, возможно, ваш вопрос должен звучать так: «Как я могу запустить многострочную строку в списке или массиве Perl?»

Посмотрите на Perl's Конструкторы значений списка в 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"

Используй идиомы Люк!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...