http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Object;em=dup
には次のように書いてありますので、複製はargsという配列だけであり、args
[0]が示す文字列はARGVと共有しているfrozenな(?)文字列ではありませんか?

  clone や dup は「浅い(shallow)」コピーであることに注意してください。
  オブジェクト自身を複製するだけで、オブジェクトの指している先
  (たとえば配列の要素など)までは複製しません。

Chikara Takamatsu wrote:
> 始めまして。高松と申します。
> 最近Rubyを始め、フィルタプログラムを作っているのですが
> 
> args = ARGV.dup
> args[0].chop!
> 
> のようなプログラムを書いて引数をつけて渡すと
> test.rb:2:in `chop!': can't modify frozen string (TypeError)
> from test.rb:2
> のようなエラーが出てしまいます。
> dupの説明からはfrozenの情報は含めないでコピーするように思えるのですが
> どこかおかしいのでしょうか?

///// ------------------------------------------------------------------
-O-O-       斉藤 秀格 (SAITO Shukaku)      mailto:shukaku / sai10.nu
  _   ------------------------------------------------------------------