Я продолжаю печатать свой хэш как количество выделенных сегментов. Как мне распечатать содержимое моего хэша?
Без использования while
цикла было бы наиболее предпочтительным (например, однострочник будет лучше).
Я продолжаю печатать свой хэш как количество выделенных сегментов. Как мне распечатать содержимое моего хэша?
Без использования while
цикла было бы наиболее предпочтительным (например, однострочник будет лучше).
Data :: Dumper - твой друг
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
будет выводить
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
операторы в C и C ++. Причина, по которой это имеет значение в этом контексте, заключается в том, что в Perl, если вы вызываете функцию со значением хеш-функции в качестве аргумента, это значение хеш-функции будет распечатано и разбито на несколько аргументов - так%hsh=("a" => 1, "b" => 2); foo(%hsh);
что будет эквивалентноfoo("a", 1, "b", 2)
. Если вы хотите, чтобы функция работала с самим хэшем, вам нужно передать ссылку на хеш:foo(\%hsh);
См. Perldoc.perl.org/perlsub.html#Pass-by-ReferenceЛегко:
Элегантно, но на самом деле на 30% медленнее (!):
источник
print "$_ $h{$_}\n" for (keys %h);
,$k
не существует в этом примере.for
Цикл быстрее , чемwhile
до , по меньшей мере 10000 ключей: gist.github.com/151792Вот как вы можете печатать без использования
Data::Dumper
источник
В целях отладки я буду часто использовать
YAML
.Результаты в:
В других случаях я буду использовать
Data::Dump
. Вам не нужно устанавливать столько переменных, чтобы вывести его в хорошем формате, чем вы делаетеData::Dumper
.Совсем недавно я использовал
Data::Printer
для отладки.(Результат может быть намного более красочным на терминале)
В отличие от других примеров, которые я показал здесь, этот предназначен явно только для демонстрации. Который появляется легче, если вы выкидываете структуру связанной переменной или структуры объекта.
источник
=>
что вы ожидаете. Вместо этого он всегда печатает ключ, несколько пробелов, а затем значение. Что помогает человеку сканировать вывод.Ответ зависит от того, что находится в вашем хеше. Если у вас есть простой хэш простой
или
будет делать, но если у вас есть хеш, заполненный ссылками, вы получите что-то, что может пройтись по этим ссылкам и дать разумный вывод. Эта прогулка по ссылкам обычно называется сериализацией. Есть много модулей, которые реализуют различные стили, некоторые из наиболее популярных:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
Из-за того, что
Data::Dumper
является частью базовой библиотеки Perl, она, вероятно, самая популярная; Тем не менее, некоторые другие модули могут предложить очень хорошие вещи.источник
Мой любимый: Smart :: Комментарии
Вот и все.
источник
use
Smart::Comments
, я не вижу его с этой точки зрения. Но для счетчика,Smart::Comments
он довольно хорошо ведет себя как модуль с областью видимости , не должно быть выходного поведения в любом модуле, который также не использует SC. Таким образом, проблема будет изолирована для этих областей с помощью оператора использования . Если вы говорите, что программист по техническому обслуживанию не несет ответственности за чтение документации по включенным модулям, я не могу согласиться. Тем не менее, спасибо за комментарийЦиклический:
функциональная
Но для чистой элегантности я должен был бы выбрать Wrang-Wrang. Для моего собственного кода я бы выбрал свой foreach. Или использовать самосвал тетро.
источник
foreach
иmap
.map
должен использоваться для преобразования списка, а не в пустом контексте для эмуляции цикла forСамый простой способ в моем опыте - просто использовать Dumpvalue .
Работает как шарм, и вам не нужно беспокоиться о форматировании хэша, поскольку он выводит его, как это делает отладчик Perl (отлично подходит для отладки). Кроме того, Dumpvalue включен в стандартный набор модулей Perl, так что вам не придется связываться с CPAN, если вы находитесь за каким-то драконовским прокси (как я на работе).
источник
Если вы хотите быть педантичным и держать его в одной строке (без использования операторов и шебанга), тогда я как бы отброслю ответ Тетромино и предложу:
Не делать ничего особенного, кроме использования анонимного хеша для пропуска временной переменной;)
источник
Я добавляю один пробел для каждого элемента хэша, чтобы увидеть его хорошо:
источник
Мне очень нравится сортировать ключи в одном коде строки:
источник