#はじめに
Perlは以前業務で他の人から渡されたソースを読む機会があり、その時のコードがあまりに何やってるかよく分からないコードだったもので、それ以来すっかりPerl恐怖症に。
ずーっと敬遠していたのですが、新しく配属されるプロジェクトでPerlを本格的に使うことになり、いよいよ逃げられなくなりました。
それでもまあ、PHPで言うところのvar_dump()
があればどうにかなるだろう、とは思っていたのですが、これが意外と素直に出てこない。
特にハッシュのデバッグがちょっと面倒に感じました。
というわけで、その試行錯誤の果てを自分用に備忘録。
#方法1
Perlでは、PHPと違いprint
でスカラー値、配列、ハッシュ全て表示出来るとのこと。あら便利。
#!/usr/bin/perl
use strict;
use warnings;
my %members = (
'西住みほ' => 1023,
'武部沙織' => 622,
'五十鈴華' => 1216,
'秋山優花里' => 66,
'冷泉麻子' => 91
);
print %members;
実行結果
秋山優花里66西住みほ1023五十鈴華1216冷泉麻子91武部沙織622
怒涛の横一列。
表示は確かに出来るけど、これじゃあいくらなんでも、てもの。
#方法2
Perlでは、配列やハッシュをprint
する際に区切り文字が指定出来るとのこと。
$,
という特殊変数を定義してあげればいいようです。
#!/usr/bin/perl
use strict;
use warnings;
my %members = (
'西住みほ' => 1023,
'武部沙織' => 622,
'五十鈴華' => 1216,
'秋山優花里' => 66,
'冷泉麻子' => 91
);
$, = "\n";
print %members;
実行結果
西住みほ
1023
冷泉麻子
91
武部沙織
622
秋山優花里
66
五十鈴華
1216
さっきよりは見やすくなったものの。。。という感じです。
そもそもこの数字は「数値」なのか「文字列」なのか、そこも不明。
その証拠に、%members
を
my %members = (
'西住みほ' => '1023',
'武部沙織' => '622',
'五十鈴華' => '1216',
'秋山優花里' => '66',
'冷泉麻子' => '91'
);
とvalueを文字列に置き換えてみても、結果はこう。
武部沙織
622
秋山優花里
66
冷泉麻子
91
五十鈴華
1216
西住みほ
1023
変わってませんね。
ちなみに順番が違うのは、Perlのハッシュが順番を保持しないから。
#方法3
Data::Dumperを使う方法。
Dumperを使う際は、print
だけでなく、print Dumper
と書く。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %members = (
'西住みほ' => 1023,
'武部沙織' => 622,
'五十鈴華' => 1216,
'秋山優花里' => 66,
'冷泉麻子' => 91
);
print Dumper %members;
実行結果
$VAR1 = '冷泉麻子';
$VAR2 = 91;
$VAR3 = '秋山優花里';
$VAR4 = 66;
$VAR5 = '武部沙織';
$VAR6 = 622;
$VAR7 = '西住みほ';
$VAR8 = 1023;
$VAR9 = '五十鈴華';
$VAR10 = 1216;
さっきよりは良い感じです。
ハッシュのvalueに該当する箇所を文字列に置き換えてみます。
my %members = (
'西住みほ' => '1023',
'武部沙織' => '622',
'五十鈴華' => '1216',
'秋山優花里' => '66',
'冷泉麻子' => '91'
);
実行結果
$VAR1 = '武部沙織';
$VAR2 = '622';
$VAR3 = '冷泉麻子';
$VAR4 = '91';
$VAR5 = '西住みほ';
$VAR6 = '1023';
$VAR7 = '五十鈴華';
$VAR8 = '1216';
$VAR9 = '秋山優花里';
$VAR10 = '66';
ちゃんと文字列と数値が区別されています。
せっかくなので、key => value
な関係をもう少し見やすく出来ないものかと。
#方法4 (解決策)
Data::Dumperを使い、かつハッシュを無名ハッシュとして一度変数に代入し、それをprint
する方法。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %members = (
'西住みほ' => 1023,
'武部沙織' => 622,
'五十鈴華' => 1216,
'秋山優花里' => 66,
'冷泉麻子' => 91
);
my $membersRef = {%members};
print Dumper $membersRef;
実行結果
$VAR1 = {
'冷泉麻子' => 91,
'武部沙織' => 622,
'秋山優花里' => 66,
'五十鈴華' => 1216,
'西住みほ' => 1023
};
これですよこれ!文字列でやってみます。
$VAR1 = {
'秋山優花里' => '66',
'西住みほ' => '1023',
'冷泉麻子' => '91',
'武部沙織' => '622',
'五十鈴華' => '1216'
};
完璧ですね。これで一件落着。
#結論
- Data::Dumperを使う。
- ハッシュは無名ハッシュとして一度変数に代入。
- 代入しておいた変数を
print Dumper
する。
#おわりに
Perlを触り始めてまだ日が浅いのですが、慣れるまでは時間が掛かりそうな予感。
あとは実際のコードに触れながらやっていくしかありませんね。とほほ。
改めてPHPって便利な言語だったなと。。
ただクイックソートなど、PHPとPerlで同じようなコードを書いてみたら、Perlの方が体感で分かるほど圧倒的に早かったので、使いこなせたらそれはそれで幅が広がりそうです。
あとはPerlの醍醐味は文字列処理にあるらしい?ので、そこも慣れていきたいです。
何か間違いなどあれば、ご指摘頂けると有り難いです。