Perlのデバッグを効率化するためのData::Dumper活用法
作成日:2025.01.29
Perlのデバッグに便利なData::Dumperの使い方を解説します。変数や配列の出力方法、ネスト構造の扱い、出力フォーマットのカスタマイズなど、効率的なデバッグ手法について具体例を交えながら紹介します。
Perlのデバックに便利な Data::Dumperの使い方メモ。
変数・配列・連想配列を出力
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $scholar = 'scholar';
my @array = ('array1','array2','array3');
my %hash = (
'hash1' => 1,
'hash2' => 2,
'hash3' => 3
);
print Dumper $scholar;
print Dumper @array;
print Dumper %hash;
### 出力
$VAR1 = 'scholar';
$VAR1 = 'array1';
$VAR2 = 'array2';
$VAR3 = 'array3';
$VAR1 = 'hash1';
$VAR2 = 1;
$VAR3 = 'hash2';
$VAR4 = 2;
$VAR5 = 'hash3';
$VAR6 = 3;
print Dumper \@array;
print Dumper \%hash;
### 出力
$VAR1 = [
'array1',
'array2',
'array3'
];
$VAR1 = {
'hash1' => 1,
'hash2' => 2,
'hash3' => 3
};
複雑なネストの変数を出力
my @array = (
'array0',
['array1_1','array1_2','array1_3'],
['array2_1','array2_2',
['array2_3_1','array2_3_2','array2_3_3']
]
);
print Dumper \@array;
### 出力
$VAR1 = [
'array0',
[
'array1_1',
'array1_2',
'array1_3'
],
[
'array2_1',
'array2_2',
[
'array2_3_1',
'array2_3_2',
'array2_3_3'
]
]
];
my $data = {
'name' => 'tatsuya',
'age' => 48,
'favorite' => [
'古生物',
'将棋',
"B'z"
],
'reading' => {
'SF' => '法治の獣',
'Horror' => '屍鬼',
'Fantasy' => '十二国記',
'Mystery' => '荊の城'
}
};
print Dumper $data;
### 出力
$VAR1 = {
'reading' => {
'Horror' => '屍鬼',
'Fantasy' => '十二国記',
'Mystery' => '荊の城',
'SF' => '法治の獣'
},
'name' => 'tatsuya',
'favorite' => [
'古生物',
'将棋',
'B\'z'
],
'age' => 48
};
ネストしたハッシュのリストを出力
my @users = (
{
id => 1,
name => '御堂綱紀',
contact => {
email => 'tsunanori@example.com',
phone => '090-1234-5678',
},
roles => ['admin', 'editor'],
},
{
id => 2,
name => 'アメイヤ・アシュリン',
contact => {
email => 'ameya@example.com',
phone => '080-8765-4321',
},
roles => ['viewer'],
},
);
print Dumper \@users;
### 出力
$VAR1 = [
{
'roles' => [
'admin',
'editor'
],
'id' => 1,
'contact' => {
'phone' => '090-1234-5678',
'email' => 'tsunanori@example.com'
},
'name' => '御堂綱紀'
},
{
'contact' => {
'phone' => '080-8765-4321',
'email' => 'ameya@example.com'
},
'name' => 'アメイヤ・アシュリン',
'id' => 2,
'roles' => [
'viewer'
]
}
];
配列のキーをソートして出力
$Data::Dumper::Sortkeys = 1;
print Dumper \@users;
### 出力
$VAR1 = [
{
'contact' => {
'email' => 'tsunanori@example.com',
'phone' => '090-1234-5678'
},
'id' => 1,
'name' => '御堂綱紀',
'roles' => [
'admin',
'editor'
]
},
{
'contact' => {
'email' => 'ameya@example.com',
'phone' => '080-8765-4321'
},
'id' => 2,
'name' => 'アメイヤ・アシュリン',
'roles' => [
'viewer'
]
}
];
インデントのスタイル変更
$Data::Dumper::Indent で設定可能。
perldoc.jpによると、
インデントのスタイルを制御します。0, 1, 2, 3を指定できます。スタイル0はリストの 項目間に改行、インデント、スペースを一切含めずに出力します。もっともコンパクトな形式ですが、 perlとして実行可能です。スタイル1は改行ありで読みやすい形ですが、見やすいインデントが ありません(それぞれの構造におけるレベルは、単に固定長のスペースでインデントされています)。 スタイル2(デフォルト)はとても読みやすい形式で、ハッシュキーが揃っています。 スタイル3はスタイル2に似ていますが、配列の要素にインデックス数が付記されます(ただし、 付記は独立した行なので、配列の出力は2倍の行を消費します)。スタイル2がデフォルトです。
とのこと。
$Data::Dumper::Indent = 0;
print Dumper \@users;
### 出力
$VAR1 = [{'contact' => {'phone' => '090-1234-5678','email' => 'tsunanori@example.com'},'roles' => ['admin','editor'],'id' => 1,'name' => '御堂綱紀'},{'roles' => ['viewer'],'contact' => {'phone' => '080-8765-4321','email' => 'ameya@example.com'},'name' => 'アメイヤ・アシュリン','id' => 2}];
$Data::Dumper::Indent = 1;
print Dumper \@users;
### 出力
$VAR1 = [
{
'name' => '御堂綱紀',
'roles' => [
'admin',
'editor'
],
'contact' => {
'email' => 'tsunanori@example.com',
'phone' => '090-1234-5678'
},
'id' => 1
},
{
'contact' => {
'phone' => '080-8765-4321',
'email' => 'ameya@example.com'
},
'id' => 2,
'name' => 'アメイヤ・アシュリン',
'roles' => [
'viewer'
]
}
];
$Data::Dumper::Indent = 2;
print Dumper \@users;
### 出力
$VAR1 = [
{
'roles' => [
'admin',
'editor'
],
'name' => '御堂綱紀',
'contact' => {
'phone' => '090-1234-5678',
'email' => 'tsunanori@example.com'
},
'id' => 1
},
{
'name' => 'アメイヤ・アシュリン',
'id' => 2,
'contact' => {
'email' => 'ameya@example.com',
'phone' => '080-8765-4321'
},
'roles' => [
'viewer'
]
}
];
$Data::Dumper::Indent = 3;
print Dumper \@users;
### 出力
$VAR1 = [
#0
{
'id' => 1,
'roles' => [
#0
'admin',
#1
'editor'
],
'name' => '御堂綱紀',
'contact' => {
'phone' => '090-1234-5678',
'email' => 'tsunanori@example.com'
}
},
#1
{
'name' => 'アメイヤ・アシュリン',
'id' => 2,
'roles' => [
#0
'viewer'
],
'contact' => {
'phone' => '080-8765-4321',
'email' => 'ameya@example.com'
}
}
];

奈良市を拠点に、25年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
Movable Type プラグインで実現するエラー画面・ログイン画面の出力方法
2025.04.10
Movable Typeプラグイン開発において、エラー画面やログイン画面をどのように出力すべきか、その基本手法を具体的なコード例を交えて解説します。MT::App の show_error および show_login メソッドの利用方法や各オプションの効果を理解することで、プラグインにおけるユーザーインターフェースのカスタマイズが容易になります。
Movable Type プラグインによるユーザーアクションメニュー制御 ― condition設定の実践的解法
2025.04.07
Movable Type プラグインを使用したユーザーアクションメニューの制御方法を解説します。特に、config.yamlでの condition 設定の制限とその回避策について、core_user_actions のオーバーライドによる実践的な解決方法を、具体的なコード例とともに紹介します。
Movable Typeプラグイン入門:MT::Author で実現するロール付与の手法
2025.03.26
本記事では、Movable Type のプラグイン開発において、MT::Author オブジェクトを利用したユーザーへのロール付与手法を詳しく解説します。具体的なコード例とともに、ユーザー、ブログ、ロールの各オブジェクトの取得方法や、add_role メソッドを活用したロール付与処理の流れを紹介。実務に直結する実装ポイントを分かりやすく解説しています。
Movable Typeプラグイン入門:MT::Authorを活用した新規ユーザー作成の実例解説
2025.03.21
本記事では、Movable Typeプラグインの実装において、MT::Authorオブジェクトを活用したユーザーの新規作成処理の具体例を解説します。コードサンプルを通して、ユーザーの存在確認から新規作成、各種プロパティの設定手順やログ出力まで、実践的なポイントを詳述しています。