# 버킷 수 / # 할당으로 해시를 계속 인쇄합니다. 해시의 내용을 어떻게 인쇄합니까?
while
루프를 사용하지 않는 것이 가장 좋습니다 (예를 들어, 한 줄짜리 가 가장 좋습니다).
답변
Data :: Dumper 는 당신의 친구입니다.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
출력합니다
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
답변
쉬운:
print "$_ $h{$_}\n" for (keys %h);
우아하지만 실제로 30 % 더 느립니다 (!) :
while (my ($k,$v)=each %h){print "$k $v\n"}
답변
사용하지 않고 인쇄하는 방법 Data::Dumper
print "@{[%hash]}";
답변
디버깅 목적으로 자주 사용 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::Printer
디버깅 에 사용 했습니다.
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"
}
}
답변
대답은 해시의 내용에 따라 다릅니다. 간단한 해시를 가지고 있다면
print map { "$_ $h{$_}\n" } keys %h;
또는
print "$_ $h{$_}\n" for keys %h;
그러나 참조로 채워진 해시가 있으면 해당 참조를 걸고 합리적인 출력을 생성 할 수있는 무언가가 생깁니다. 이러한 참조를 일반적으로 직렬화라고합니다. 다른 스타일을 구현하는 많은 모듈이 있으며, 가장 많이 사용되는 모듈은 다음과 같습니다.
사실로 인해 Data::Dumper
핵심 펄 라이브러리의 일부입니다, 아마 가장 인기가있다; 그러나 다른 모듈 중 일부는 제공 할만한 좋은 기능이 있습니다.
답변
답변
루핑 :
foreach(keys %my_hash) { print "$_ / $my_hash{$_}\n"; }
기능의
map {print "$_ / $my_hash{$_}\n"; } keys %my_hash;
그러나 순전히 우아함을 위해서는 wrang-wrang ‘s를 선택해야합니다. 내 코드의 경우 foreach를 선택합니다. 또는 tetro의 덤퍼 사용.