技術資料

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'
                         }
          }
        ];

XAMPP環境にStrawberry Perlを導入する方法:Windowsでの設定手順

2025.01.27

Windows版XAMPPに同梱されている簡易版Perlを、より機能豊富なStrawberry Perlに置き換える手順を解説します。ダウンロードから環境変数の設定、動作確認まで、順を追って説明しています。

Perl XAMPP

PHPとPerlでファイルパーミッションを変更する方法(chmod関数)

2024.11.16

PHPとPerlには、ファイルのパーミッションを変更するためのchmod関数が標準で用意されています。この記事では、PHPとPerlそれぞれのchmod関数を使ったファイルパーミッション変更の基本的な使い方を紹介します。

Perl PHP

perlでの文字列置換と数値抽出の方法

2023.04.26

perlで特定の文字列から末尾のカンマ区切りの数値部分を抽出する方法を紹介します。s/// 演算子を使った文字列置換の例と、数値が含まれているかを正規表現でチェックする方法を解説します。

Perl

perlでMySQLを操作する基本的なテンプレート

2023.04.08

perlでMySQLデータベースを操作するための基本的なテンプレートを紹介します。DBIモジュールを使用してデータベースに接続し、SQLクエリを実行する方法を解説。

MySQL Perl

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

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP