SL4AのPerl for Androidでマルチバイト文字を使う際に落ちる件

SL4AのPerl for Androidで日本語(マルチバイト文字)をRPCで使うとエラーが発生します。
原因は Android.pm で RPCの為にパラメータをto_json()/from_json()で処理する際にutf8オプションが使用されていないことです。解決するにはAndroid.pmのdo_rpc()を以下のように変更する必要があります。(もしくはto_json/from_jsonをencode_json/decode_jsonに変える)

sub do_rpc {
	my $self = shift;
	if ( $self->trace ) {
		show_trace(qq[do_rpc: $self: @_]);
	}
	my $method  = pop;
	my $request = to_json(
		{
			id     => $self->{id},
			method => $method,
			params => [@_]
		},
		{ utf8 => 1 }
	);
	if ( defined $self->{conn} ) {
		print { $self->{conn} } $request, "\n";
		if ( $self->trace ) {
			show_trace(qq[client: sent: "$request"]);
		}
		$self->{id}++;
		my $response = readline( $self->{conn} );
		chomp $response;
		if ( $self->trace ) {
			show_trace(qq[client: rcvd: "$response"]);
		}
		if ( defined $response && length $response ) {
			my $result = from_json( $response, { utf8 => 1 } );
			my $success = 0;
			my $error;
			if ( defined $result ) {
				if ( ref $result eq 'HASH' ) {
					if ( defined $result->{error} ) {
						$error = to_json( { error => $result->{error} },
							{ utf8 => 1 } );
					}
					else {
						$success = 1;
					}
				}
				else {
					$error = "illegal JSON reply: $result";
				}
			}
			unless ( $success || defined $error ) {
				$error = "unknown JSON error";
			}
			if ( defined $error ) {
				printf STDERR "$0: client: error: %s\n", $error;
			}
			if ( $Opt{trace} ) {
				print STDERR Data::Dumper->Dump( [$result], [qw(result)] );
			}
			return $result;
		}
	}
	$self->close;
	return;
}

上記のサブルーチンでAndroid.pmにモンキーパッチ当ててしまえば日本語を問題なく扱えるようになります。