2010-11-10
ハッシュのキーとバリューを入れ替える方法
perl | |
![]()
[追記] reverse() を使う方法の方が速くて簡潔でお勧めです! id:tomi-ru++
あまり必要になるケースは無いと思いますが Tips です。
use strict; use warnings; use Test::More; my %a = ( foo => 1, bar => 2, baz => 3, ); my %b; @b{ values %a } = keys %a; # スライスで入れ替え is_deeply(\%b, { 1 => 'foo', 2 => 'bar', 3 => 'baz', }); done_testing;
Test::mysql で起動したインスタンスに mysql クライアントで接続するとテストがさらに快適に
昨日書いたエントリ、Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件ですが、prove とか make test がコケたりしたときに、実際に DB の中身がどうなってるか見れた方がデバッグが捗りますよね。
加えて、どうせなら使い慣れた mysql クライアントでテストの結果、テーブルがどうなっているか見たいですね。
ということで、テスト用に立ち上げた mysqld に手軽に接続できるスクリプトを書いてみました。
#!/usr/bin/env perl use strict; use warnings; use File::Spec; use JSON; my $tempfile = File::Spec->catfile(File::Spec->tmpdir, 'test_mysqld.json'); open my $fh, '<', $tempfile or die $!; my $json = decode_json(join '', <$fh>); close $fh; my @command = qw(mysql --user root --socket); push @command, $json->{'my_cnf'}{'socket'}, 'test'; exec @command;
こんな感じのスクリプトを、t/script/test_mysql.pl とか適当な名前で保存してパーミッション与えて下さい。
t/script/mysqld_runner.pl が立ち上げた mysqld はプロセス再起動するだけで、まっさらな状態に戻せるので、デバッグ用途だけでなく、サンドボックス的に色々実験する用途にも向いているので、色々と遊べて良いと思います。
これで、Test::Fixture::DBI によるテストがより快適になりました。
コメントを書く


