Есть ли в Perl эквивалент многострочных строк Python? - PullRequest
20 голосов
/ 20 мая 2010

В Python вы можете получить многострочную строку, подобную этой, используя строку документации

foo = """line1
line2
line3"""

Есть ли что-то эквивалентное в Perl?

Ответы [ 5 ]

37 голосов
/ 20 мая 2010

Обычные кавычки:

# Non-interpolative
my $f = 'line1
line2
line3
';

# Interpolative
my $g = "line1
line2
line3
";

Здесь можно указать любой токен как конец блока цитируемого текста:

# Non-interpolative
my $h = <<'END_TXT';
line1
line2
line3
END_TXT

# Interpolative
my $h = <<"END_TXT";
line1
line2
line3
END_TXT

Операторы кавычек в стиле Regex позволяют использовать в качестве разделителя практически любой символ - точно так же, как регулярное выражение позволяет изменять разделители.

# Non-interpolative
my $i = q/line1
line2
line3
/;

# Interpolative
my $i = qq{line1
line2
line3
};

ОБНОВЛЕНИЕ: исправлены токены here-doc.

33 голосов
/ 20 мая 2010

Perl не имеет значительных синтаксических вертикальных пробелов, поэтому вы можете просто сделать

$foo = "line1
line2
line3
";

, что эквивалентно

$foo = "line1\nline2\nline3\n";
15 голосов
/ 20 мая 2010

Да, вот документ.

$heredoc = <<END;
Some multiline
text and stuff
END
0 голосов
/ 04 июля 2016

Быстрый пример

#!/usr/bin/perl
use strict;
use warnings;

my $name = 'Foo';

my $message = <<'END_MESSAGE';
Dear $name,

this is a message I plan to send to you.

regards
  the Perl Maven
END_MESSAGE

print $message;

... Результат:

Dear $name,

this is a message I plan to send to you.

regards
  the Perl Maven

Ссылка: http://perlmaven.com/here-documents

0 голосов
/ 21 мая 2010

Да, у вас есть 2 варианта:

1.herdoc, обратите внимание, что все данные в heredocs интерполируются:

my $ data = <

ваши данные

END

2.qq () см. Например:

print qq ( HTML

$ ваш текст

BODY

HTML );

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