クエリ文字列をなんかいい感じに正規化っぽいことしたい
key 順でソートしたいけど、同じ key の value の順番は変えたくないみたいな。
最初もっとダサかったけど motemen さんに query_form_hash とか教えてもらった。canonical とインターフェイスを似せた query_form_canonical を定義してみる。なんか、そもそも論とかありそう。
use URI;
use URI::QueryParam;
sub URI::query_form_canonical {
my $self = shift;
my $other = $self->clone;
my $hash = $self->query_form_hash;
$other->query_form(map { $_ => $hash->{$_} } sort keys %$hash);
$other;
}
sub nearly_equal ($$) {
my ($a, $b) = @_;
$a = URI->new($a);
$b = URI->new($b);
$a->query_form_canonical->eq($b->query_form_canonical);
}
use Test::More;
ok nearly_equal('/foo/bar?b=b&a=a&b=c', '/foo/bar?a=a&b=b&b=c');
ok !nearly_equal('/foo/bar?a=a&b=b&b=c', '/foo/bar?a=a&b=c&b=b');
ok nearly_equal('/foo/bar', '/foo/bar');
done_testing;
一部間違っていたので修正した
http://twitter.com/#!/nanto_vi/status/83883488855592961:twitter:detail