From: Yukihiro Matsumoto Date: 2008-12-08T22:10:41+09:00 Subject: [ruby-dev:37319] Re: '*' parameter in pack format 'M', 'm', or 'P' acts oddly まつもと ゆきひろです In message "Re: [ruby-dev:37289] '*' parameter in pack format 'M', 'm', or 'P' acts oddly" on Sat, 6 Dec 2008 21:29:36 +0900, "Yugui (Yuki Sonoda)" writes: |Yuguiです。 | |Array#packにおいて、"M"や"m"は出力の1行の長さを、 |"P"は対応する文字列(バイト列)の長さを表します。 | |にもかかわらず、"M*"や"m*", "P*"を指定するとアスタリスクが他のフォーマッ |トにおける場合同じく余っている配列要素の個数に展開されます。 | |結果として、何だか妙な挙動になります。 |["abc"*5, "d", "e", "f"].pack('m*') | #=> "YWJj\nYWJj\nYWJj\nYWJj\nYWJj\n" |["abc"*5, "d", "e", "f", "g", "h"].pack('m*') | #=> "YWJjYWJj\nYWJjYWJj\nYWJj\n" | |["a"].pack("P*") #=> "\220\a9\001" |["a", "b"].pack("P*") #=> ArgumentError: too short buffer for P(1 for 2) | |この3つのフォーマットではアスタリスクは単に無視するのが良いのではないか |と思いまして、添付のような修正を書いてみました。いかがでしょう? いいんじゃないでしょうか。コミットしてください。