技術資料

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 Perl

Movable Type プラグインによるユーザーアクションメニュー制御 ― condition設定の実践的解法

2025.04.07

Movable Type プラグインを使用したユーザーアクションメニューの制御方法を解説します。特に、config.yamlでの condition 設定の制限とその回避策について、core_user_actions のオーバーライドによる実践的な解決方法を、具体的なコード例とともに紹介します。

Movable Type Perl

Movable Typeプラグイン入門:MT::Author で実現するロール付与の手法

2025.03.26

本記事では、Movable Type のプラグイン開発において、MT::Author オブジェクトを利用したユーザーへのロール付与手法を詳しく解説します。具体的なコード例とともに、ユーザー、ブログ、ロールの各オブジェクトの取得方法や、add_role メソッドを活用したロール付与処理の流れを紹介。実務に直結する実装ポイントを分かりやすく解説しています。

Movable Type Perl

Movable Typeプラグイン入門:MT::Authorを活用した新規ユーザー作成の実例解説

2025.03.21

本記事では、Movable Typeプラグインの実装において、MT::Authorオブジェクトを活用したユーザーの新規作成処理の具体例を解説します。コードサンプルを通して、ユーザーの存在確認から新規作成、各種プロパティの設定手順やログ出力まで、実践的なポイントを詳述しています。

Movable Type Perl

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP