summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuji, Goro <gfuji@cpan.org>2010-10-30 00:42:00 +0900
committerFuji, Goro <gfuji@cpan.org>2010-10-30 00:42:00 +0900
commit5de2b974fb1709ee776a49ce4cecbddd6f54893b (patch)
tree5e07aea38ce905a3f896e62abd6a8dd847896bf7
parent6a9cb5182882076429e2c6ed22ccaa6bfda94022 (diff)
downloadmsgpack-python-5de2b974fb1709ee776a49ce4cecbddd6f54893b.tar.gz
perl: ord(substr(...)) *is* faster than unpack()
-rw-r--r--perl/lib/Data/MessagePack/PP.pm9
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 ) {