Есть ли в Perl эквивалент многострочных строк Python?

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

class SortedDisplayDict(dict):
   def __str__(self):
       return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"


>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}

Обратите внимание, что это ничего не меняет о том, как хранятся ключи, порядок их возврата, когда вы перебираете их и т. Д., Только как они отображаются с print или на консоль python.

20
задан ire_and_curses 21 May 2010 в 17:58
поделиться

4 ответа

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

$foo = "line1
line2
line3
";

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

$foo = "line1\nline2\nline3\n";
33
ответ дан 29 November 2019 в 22:31
поделиться

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

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

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

Here-docs позволяют определить любой токен как конец блока цитируемого текста:

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

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

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

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

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

UPDATE: Исправлены лексемы here-doc.

37
ответ дан 29 November 2019 в 22:31
поделиться

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

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

my $ data = <

ваши данные

END

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

print qq ( HTML

$ ваш текст

BODY

HTML );

0
ответ дан 29 November 2019 в 22:31
поделиться

Да, здесь-док.

$heredoc = <<END;
Some multiline
text and stuff
END
15
ответ дан 29 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: