diff options
| author | Fuji, Goro <gfuji@cpan.org> | 2010-10-30 00:42:00 +0900 |
|---|---|---|
| committer | Fuji, Goro <gfuji@cpan.org> | 2010-10-30 00:42:00 +0900 |
| commit | 5de2b974fb1709ee776a49ce4cecbddd6f54893b (patch) | |
| tree | 5e07aea38ce905a3f896e62abd6a8dd847896bf7 | |
| parent | 6a9cb5182882076429e2c6ed22ccaa6bfda94022 (diff) | |
| download | msgpack-python-5de2b974fb1709ee776a49ce4cecbddd6f54893b.tar.gz | |
perl: ord(substr(...)) *is* faster than unpack()
| -rw-r--r-- | perl/lib/Data/MessagePack/PP.pm | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/perl/lib/Data/MessagePack/PP.pm b/perl/lib/Data/MessagePack/PP.pm index 8daf248..0c19cb1 100644 --- a/perl/lib/Data/MessagePack/PP.pm +++ b/perl/lib/Data/MessagePack/PP.pm @@ -304,12 +304,12 @@ foreach my $pair( sub _unpack { my ( $value ) = @_; - # get a header byte - defined(my $byte = unpack "x$p C", $value) + $p < length($value) or Carp::confess("Data::MessagePack->unpack: insufficient bytes"); + # get a header byte + my $byte = ord( substr $value, $p, 1 ); $p++; - # +/- fixnum, nil, true, false return $byte2value[$byte] if $typemap[$byte] & $T_DIRECT; @@ -454,6 +454,9 @@ sub execute { $self->{buff} .= $value; local $self->{stack} = []; + #$p = 0; + #eval { Data::MessagePack::PP::_unpack($self->{buff}) }; + #warn "[$p][$@]"; $p = 0; while ( length($self->{buff}) > $p ) { |
