Как я могу распечатать содержание хеша в Perl?

С visibility:hidden объект все еще поднимает вертикальную высоту на странице. С display:none это полностью удалено. Если у Вас будет текст под изображением, и Вы делаете display:none, тот текст сместится для заполнения пространства, где изображение было. Если Вы сделаете visibility:hidden, то текст останется в том же месте.

160
задан Peter Mortensen 24 April 2016 в 10:16
поделиться

8 ответов

Data :: Dumper - ваш друг.

use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);

выведет

$VAR1 = {
          'def' => [
                     4,
                     5,
                     6
                   ],
          'abc' => 123
        };
241
ответ дан 23 November 2019 в 21:29
поделиться

Легко:

print "$_ $h{$_}\n" for (keys %h);

Элегантно, но на самом деле на 30% медленнее (!):

while (my ($k,$v)=each %h){print "$k $v\n"}
60
ответ дан 23 November 2019 в 21:29
поделиться

Ответ зависит от того, что находится в вашем хэше. Если у вас есть простой хеш, подойдет простой

print map { "$_ $h{$_}\n" } keys %h;

или

print "$_ $h{$_}\n" for keys %h;

, но если у вас есть хеш, заполненный ссылками, вы получите что-то, что может пройти по этим ссылкам и произвести разумный вывод. Такой обход ссылок обычно называют сериализацией. Существует множество модулей, реализующих разные стили, некоторые из наиболее популярных из них:

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

11
ответ дан 23 November 2019 в 21:29
поделиться

В целях отладки я часто использую YAML .

use strict;
use warnings;

use YAML;

my %variable = ('abc' => 123, 'def' => [4,5,6]);

print "# %variable\n", Dump \%variable;

Результат:

# %variable
---
abc: 123
def:
  - 4
  - 5
  - 6

В других случаях я буду использовать Data :: Dump . Вам не нужно устанавливать столько переменных, чтобы он выводил его в удобном формате, чем для Data :: Dumper .

use Data::Dump = 'dump';

print dump(\%variable), "\n";
{ abc => 123, def => [4, 5, 6] }

Совсем недавно я использовал Data :: Принтер для отладки.

use Data::Printer;
p %variable;
{
    abc   123,
    def   [
        [0] 4,
        [1] 5,
        [2] 6
    ]
}

(Результат может быть намного более красочным на терминале)

В отличие от других примеров, которые я показал здесь, этот предназначен только для отображения. Что легче обнаружится, если вы выгрузите структуру связанной переменной или структуры объекта.

use strict;
use warnings;

use MTie::Hash;
use Data::Printer;

my $h = tie my %h, "Tie::StdHash";
@h{'a'..'d'}='A'..'D';
p %h;
print "\n";
p $h;
{
    a   "A",
    b   "B",
    c   "C",
    d   "D"
} (tied to Tie::StdHash)

Tie::StdHash  {
    public methods (9) : CLEAR, DELETE, EXISTS, FETCH, FIRSTKEY, NEXTKEY, SCALAR, STORE, TIEHASH
    private methods (0)
    internals: {
        a   "A",
        b   "B",
        c   "C",
        d   "D"
    }
}
23
ответ дан 23 November 2019 в 21:29
поделиться

Мой любимый: Smart :: Comments

use Smart::Comments;
# ...

### %hash

Вот и все.

10
ответ дан 23 November 2019 в 21:29
поделиться

Циклы:

foreach(keys %my_hash) { print "$_ / $my_hash{$_}\n"; }

Функциональные

map {print "$_ / $my_hash{$_}\n"; } keys %my_hash;

Но для чистой элегантности я бы выбрал wrang-wrang. Для своего собственного кода я бы выбрал свой foreach. Или использовать самосвал тетро.

4
ответ дан 23 November 2019 в 21:29
поделиться

По моему опыту, самый простой способ - просто использовать Dumpvalue .

use Dumpvalue;
...
my %hash = { key => "value", foo => "bar" };
my $dumper = new DumpValue();
$dumper->dumpValue(\%hash);

Работает как шарм, и вам не нужно беспокоиться о форматировании хэша, так как он выводит его как отладчик Perl делает (отлично подходит для отладки). Кроме того, Dumpvalue включен в стандартный набор модулей Perl, поэтому вам не придется возиться с CPAN, если вы используете какой-то драконовский прокси (например, я на работе).

2
ответ дан 23 November 2019 в 21:29
поделиться

Если вы хотите быть педантичным и придерживаться одной строчки (без выражений использования и shebang), то я как бы откатываю от ответа тетромино и предлагаю:

print Dumper( { 'abc' => 123, 'def' => [4,5,6] } );

Не делаю ничего особенного, кроме использования анонимного хэша для пропуска временной переменной;)

1
ответ дан 23 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

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