2015/04/04

URI::Template の最新版(0.21)で variables メソッドの挙動が変わっている件

この差分 に起因する振る舞いの違いなんだけど、

 sub variables {
-    return keys %{ $_[ 0 ]->{ _vars } };
+    return sort {$_[ 0 ]->{ _vars }->{ $a } <=> $_[ 0 ]->{ _vars }->{ $b } } keys %{ $_[ 0 ]->{ _vars } };
 }

keys はスカラコンテキストでリストの数を返すのだけど、sort は undef を返すという違いがあって(なんと!)、

if ( $uri_template_obj->variables ) {
    # something
}

みたいなことをやってると挙動変わってるのにハマる可能性ある。

$ perldoc -f sort
In list context, this sorts the LIST and returns the sorted list value.  In scalar context, the behaviour of "sort()" is undefined.

うぇぇぇい。


追記

issue あげといたら速攻対応してもらえた 。0.22 で 0.20 までと同じ挙動になってます。

サイト内検索