JSONモジュールとJSON::PPモジュールの共存

JSONモジュールとJSON::PPモジュール、どちらかが使えれば基本的には問題ないでしょうが、もし何かしらの理由で両方使いたくなった場合にどうするか。
普通にuse JSON、use JSON::PPと書いただけでは、"Prototype mismatch: sub main::decode_json"のようなメッセージが表示されてしまう。
そこで、JSONモジュールとJSON::PPモジュール用にパッケージを分けて、それぞれのパッケージの中でuseするようにする。
本体側の処理は、それぞれのパッケージの処理を呼び出すようにする。

サンプルソース

サンプルソースの中では、JSONモジュールのデコードをわざと失敗させるため、不正なフォーマットにしている。

#!/usr/bin/env perl

use Data::Dumper;

my $text1 = '"a": "hoge"}';   # illegal format
my $text2 = '{"a": "hoge"}';  # formal format
eval {
  print "*" . Dumper (XS::decode_json_xs($text1));
};

if ($@) {
  print $@;
  print "+" . Dumper (PP::decode_json_pp($text2));
  
}

package XS;
use JSON;
sub decode_json_xs {
  my $text = shift;
  decode_json($text);
}

package PP;
use JSON -support_by_pp;
sub decode_json_pp {
  my $text = shift;
  decode_json($text);
}

実行結果

/Users/junya/develop/perl% ./JsonSample.pl
garbage after JSON object, at character offset 3 (before ": "hoge"}") at ./JsonSample.pl line 22.
+$VAR1 = {
          'a' => 'hoge'
        };

もっと簡単に回避できる手段がありそうが気がするが、よく分からない。