Почему Perl не поддерживает интерполяцию хэшей в двойных кавычках? - PullRequest
8 голосов
/ 18 июля 2011
#!/usr/bin/perl
use warnings;

my %hash=("no1"=>1, 
        "no2"=>2,
      );

print %hash; #Prints no11no22
print "%hash"; #Prints %hash

Почему Perl не поддерживает интерполяцию хеша в двойных кавычках?Он поддерживает интерполяцию для скаляров ($), массивов (@), тогда почему не для хешей (%)?

Ответы [ 3 ]

21 голосов
/ 18 июля 2011

Цитируя Натана Торкингтона: «Большая проблема в том, что% интенсивно используется в строках с двойными кавычками с printf».Более подробная информация здесь .

15 голосов
/ 18 июля 2011

Как должен хэшировать строку?Скаляры очевидны и массивы тоже.Но каким должен быть хеш?Насколько полезной будет такая классификация?Это более или менее полезно, чем возможность использовать символ%, не экранированный в интерполирующей строке?Стоит ли столько усилий, сколько потребуется для исправления всего кода, который использует% в интерполированных строках сегодня?

Если вы можете дать хорошие ответы на эти вопросы, то я уверен, что P5P с удовольствиемслушать их.

4 голосов
/ 19 июля 2011

Не совсем ответ на вопрос «почему», но я думал, что укажу различные ответы на вопрос «как».

Можно, конечно, попробовать:

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

my %hash = (
    "no1" => 1,
    "no2" => 2,
);

print "@{[ %hash ]}\n";

Но я не знаю, какой это будет смысл.

Если вы хотите сбросить содержимое хэша или любой другой сложной структуры данных, используйте Data :: Dumper или YAML или JSON в зависимости от вашего случай использования.

...