Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP


Usage of 'q*<' Array#pack modifier #124

dbussink opened this Issue · 2 comments

2 participants


Because of issue rubinius/rubinius#2075, I have the suspicion that Array#pack with the 'q<' modifier was intended in places where currently 'q<' is used.

On Rubinius this modifier fails to parse, because it doesn't mean anything. I believe that this working on MRI is a side effect, because this ends up being parsed as the 'q*' modifier, so the endianness modifier is ignored all together.

Reason for this argument:

[1, 2].pack('q*') => "\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00"

[1, 2].pack('q*<') => "\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00"
[1, 2].pack('q<*') => "\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00"

[1, 2].pack('q*>') => "\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00"
[1, 2].pack('q>*') => "\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02"

As you can see here, 'q>' and 'q<' both end up as little endian. This problem probably hasn't happened because this code wasn't used on a big endian system where this probably would have shown.

Can anyone with more knowledge of moped confirm that this is indeed a correct rationale?

@dbussink dbussink referenced this issue in rubinius/rubinius

Array.pack('q*<') not working #2075


nice catch - thank you very much.

@durran durran closed this in ab03718

BTW, this isn't a Rubinius specific fix, it's more that it doesn't silently do something different on Rubinius :). Thanx for fixing it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.