1#!/usr/bin/env perl 2use v5.10; 3use strict; 4use warnings; 5 6use Data::Dumper qw/Dumper/; 7use BSON qw/decode encode/; 8use MongoDB::BSON; 9 10my $codec = MongoDB::BSON->new; 11 12my $from_cli = @ARGV; 13 14while (1) { 15 my $s = $from_cli ? shift(@ARGV) : <STDIN>; 16 last unless defined $s; 17 18 chomp $s; 19 $s = eval($s); 20 if ( $@ ) { 21 warn "Eval error: $@\n"; 22 next; 23 } 24 unless ( ref($s) eq 'HASH' ) { 25 warn "Not a HASH\n"; 26 next; 27 } 28 29 my $pp = eval { encode($s) }; 30 warn "PP error: $@\n" if $@; 31 32 my $xs = eval { $codec->encode_one($s) }; 33 warn "XS error: $@\n" if $@; 34 35 say "PP\n" . unpack("H*",$pp) . "\n"; 36 say "XS\n" . unpack("H*",$xs) . "\n"; 37 say "PP and XS are " . ($pp eq $xs ? "the same" : "NOT the same"); 38} 39