Perl 해시 데이터 출력하여 디버그 하기. 4가지 방법

소스를 작성하고 문제가 발생했을 경우에 디버그를 통해 어디에서 문제가 생겼는지 확인을 해야 하는 경우가 있습니다.

Perl에서도 디버그를 통해 값을 확인해야 하는 경우에 조금 번거롭습니다.

일반 변수의 경우에는 print를 사용하여 값을 출력하면 되지만 해시 데이터의 경우에는 번거로워집니다.

PHP처럼 var_dump()가 있으면 간단하게 해시 데이터를 확인할 수 있을 것입니다.

이번에는 Perl에서 해시 테이터를 출력하는 방법을 알아보겠습니다.

 

print 출력

Perl은 PHP와 다르게 print로 스칼라, 배열, 해시가 모두 출력이 가능합니다.

의외로 간단하다고 생각이 들 수 있지만, 출력 내용이 보기 불편합니다.

print를 사용하여 출력 결과를 보겠습니다.

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

my %members = (
	'홍길동' => 1203,
	'대한민국' => 262,
	'김철수' => 1729,
	'김영희' => 75,
	'고길동' => 87
);

print %members;

 

실행 결과

김영희75홍길동1203김철수1729고길동87대한민국262

 

값은 전부 표시되지만 구분을 하기가 어렵습니다.

 

구분자 사용 출력

Perl에서는 배열이나 해시를 print 하기 전에 구분 문자를 지정할 수 있습니다.

방법은 $, 라는 특수 변수를 정의해주면 됩니다.

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

my %members = (
	'홍길동' => 1203,
	'대한민국' => 262,
	'김철수' => 1729,
	'김영희' => 75,
	'고길동' => 87
);

$, = "\n";
print %members;

 

실행 결과

홍길동
1203
고길동
87
대한민국
262
김영희
75
김철수
1729

 

구분 문자를 지정 안 하고 print로 출력한 것보다 보기가 편해졌습니다.

하지만 숫자 부분이 숫자 타입으로 저장되어있는지, 문자 타입으로 저장되어있는지 말 수 가없습니다.

다음과 같이 숫자 타입을 문자 타입으로 변경하여 출력해보겠습니다.

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

my %members = (
	'홍길동' => '1203',
	'대한민국' => '262',
	'김철수' => '1729',
	'김영희' => '75',
	'고길동' => '87'
);

$, = "\n";
print %members;

 

실행 결과

대한민국
262
김영희
75
고길동
87
김철수
1729
홍길동
1203

 

결과는 숫자 타입으로 저장했을 경우와 같습니다.

 

 

Data::Dumper 출력

Data::Dumper를 사용하여 출력하는 방법입니다.

Dumper를 사용할 때에는 print가 아닌 print Dumper 라고 작성해야 합니다.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %members = (
	'홍길동' => 1203,
	'대한민국' => 262,
	'김철수' => 1729,
	'김영희' => 75,
	'고길동' => 87
);

print Dumper %members;

 

실행 결과

$VAR1 = '고길동';
$VAR2 = 87;
$VAR3 = '김영희';
$VAR4 = 75;
$VAR5 = '대한민국';
$VAR6 = 262;
$VAR7 = '홍길동';
$VAR8 = 1203;
$VAR9 = '김철수';
$VAR10 = 1729;

 

해시의 value 값을 문자열로 바꿔 출력해보겠습니다.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %members = (
	'홍길동' => '1203',
	'대한민국' => '262',
	'김철수' => '1729',
	'김영희' => '75',
	'고길동' => '87'
);

print Dumper %members;

 

실행 결과

$VAR1 = '대한민국';
$VAR2 = '262';
$VAR3 = '고길동';
$VAR4 = '87';
$VAR5 = '홍길동';
$VAR6 = '1203';
$VAR7 = '김철수';
$VAR8 = '1729';
$VAR9 = '김영희';
$VAR10 = '75';

 

해시에 저장된 값이 숫자 타입인지 문자 타입인지 정확히 알 수 있습니다.

 

무명 해시 출력 방법

Data::Dumper를 사용 출력을 할 때 key => value 형식으로 출력하고 싶은 경우가 있습니다.

이러한 경우에는 해시를 무명 해시에 대입 후 print 해주면 됩니다.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %members = (
	'홍길동' => 1203,
	'대한민국' => 262,
	'김철수' => 1729,
	'김영희' => 75,
	'고길동' => 87
);
my $membersRef = {%members};

print Dumper $membersRef;

 

실행 결과

$VAR1 = {
  '고길동' => 87,
  '대한민국' => 262,
  '김영희' => 75,
  '김철수' => 1729,
  '홍길동' => 1203
};

 

해시의 key와 value가 key => value 형식을 출력 된 것을 확인할 수 있습니다.

value 값을 문자 타입으로 변경 후 출력해보겠습니다.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %members = (
	'홍길동' => '1203',
	'대한민국' => '262',
	'김철수' => '1729',
	'김영희' => '75',
	'고길동' => '87'
);
my $membersRef = {%members};

print Dumper $membersRef;

 

실행 결과

$VAR1 = {
  '고길동' => '87',
  '대한민국' => '262',
  '김영희' => '75',
  '김철수' => '1729',
  '홍길동' => '1203'
};

 

문자 타입의 값도 문제없이 출력되는 것을 볼 수 있습니다.

해시의 값을 출력하는 방법으로 4가지 예제를 봤습니다.

저는 해시 값을 출력하는 경우 Data::Dumper를 주로 사용합니다.

경우에 따라 출력 방법이 다르기는 하지만 버그를 찾기 위한 디버그 용으로 출력하는 경우라면 Data::Dumper에 무명 해시를 사용하여 출력하는 것이 보기에 가장 쉽습니다.

댓글