Array#pack and String#unpack are broken on OS X Tiger's ruby build. This is known. I'm writing a lib where pack and unpack are used extensively and would like to provide a workaround. Does anyone have such a workaround already worked out? I can't think of a real easy way to do it so I thought I'd check before running the gauntlet. See also http://hans.fugal.net/yodl/blosxom.cgi/mac/ruby-pack.html
Broken pack/unpack workaround
on 13.03.2006 16:31
Re: Broken pack/unpack workaround
on 13.03.2006 17:48
Here's a simplistic solution:
broken = (1 == [1].pack('n')[0])
if broken
class String
alias_method :broken_unpack, :unpack
def unpack(spec)
return broken_unpack(spec.tr('nvNV', 'vnVN'))
end
end
class Array
alias_method :broken_pack, :pack
def pack(spec)
return broken_pack(spec.tr('nvNV', 'vnVN'))
end
end
end
p([1].pack('n'))
p([1].pack('v'))
p([1].pack('N'))
p([1].pack('V'))
Paul.Re: Broken pack/unpack workaround
on 13.03.2006 17:54
Paul Battley wrote:
> return broken_unpack(spec.tr('nvNV', 'vnVN'))
tr never occurred to me. That's perfect!