さっきかいたの

PACKAGE->inflate_column( query => { inflate => sub { my $u = URI->new; $u->query(shift);

            my $ret = {};
            for my $k ( $u->query_param ) {
                my @v = $u->query_param($k);
                $ret->{$k} = @v > 1 ? [@v] : $v[0];
            }

            $ret;
        },
        deflate => sub {
            my $utf8off = sub {
                my $str = shift;
                utf8::encode($str) if utf8::is_utf8($str);
            };

            my $hash = shift;
            for ( keys %$hash ) {
                if ( ref $hash->{$_} eq 'ARRAY' ) {
                    $utf8off->($_) for @{ $hash->{$_} };
                }
                else {
                    $utf8off->( $hash->{$_} );
                }
            }

            my $u = URI->new;
            $u->query_param(%$hash);
            $u->query;
        },
    }
);

foo=bar&baz=blah みたいなクエリを保存するカラムに、ハッシュで保存してハッシュで取り出すというやつ。

短くかけるかと思って書き始めたら、URIの query_formquery_param にutf8フラグったの渡すとこけたり、foo=bar&foo=baz のように配列になるべきものがうまくハッシュにできなかったりとかしてこんなに長く。

by typester / at 2006-04-10T17:33:00 / perl · dbic / Comments(0)