通信先が明確な内部APIなどのURIを構築するときはURI.pmを使わなくても良いというかURI.pmはあまり速くないので、文字列連結だけで十分だと思います
#!/usr/bin/perl use strict; use warnings; use Benchmark qw/:all/; use URI; use URI::Escape; use URL::Encode::XS qw/url_encode/; my $base = q!http://api.example.com!; my $path = q!/path/to/endpoint!; my %param = ( token => 'bar', message => 'foo bar baz hoge hogehoge hogehoghoge', ); cmpthese(timethese(-2, { 'uri' => sub { my $uri = URI->new($base . $path); $uri->query_form( s_id => 1, type => 'foo', %param ); $uri->as_string; }, 'concat' => sub { my @qs = ( s_id => 1, type => 'foo', %param ); my $uri = $base . $path . '?'; while ( @qs ) { $uri .= shift(@qs) . '='. uri_escape(shift(@qs)) . '&' } substr($uri,-1,1,""); $uri; }, 'concat_xs' => sub { my @qs = ( s_id => 1, type => 'foo', %param ); my $uri = $base . $path . '?'; while ( @qs ) { $uri .= shift(@qs) . '='. url_encode(shift(@qs)) . '&' } substr($uri,-1,1,""); $uri; }, })); __END__ Benchmark: running concat, concat_xs, uri for at least 2 CPU seconds... concat: 2 wallclock secs ( 2.04 usr + 0.00 sys = 2.04 CPU) @ 81818.63/s (n=166910) concat_xs: 2 wallclock secs ( 2.17 usr + 0.00 sys = 2.17 CPU) @ 277470.51/s (n=602111) uri: 2 wallclock secs ( 2.20 usr + 0.00 sys = 2.20 CPU) @ 25653.18/s (n=56437) Rate uri concat concat_xs uri 25653/s -- -69% -91% concat 81819/s 219% -- -71% concat_xs 277471/s 982% 239% --