fw(findwordの略)というプログラムを作ろうとしています。

fw -fp '/usr/include/**/*.h' '~/**/*.h' -wp 'define\s+\w+' -pp '%1 %2 %3'という感じで
-fp の後ろに複数のファイルパターンを
-wp の後ろに複数の単語パターンを
-pp の後ろに表示用のフォーマットを指定できるようにしたいのですが、optparseをうまく操れません

上記の実行例だと
["/usr/include/**/*.h", "~/**/*.h"]
["define\\s+\\w+"]
と表示されて欲しいのですが、実際は
["/usr/include/**/*.h", "~/**/*.h"]
["define\\s+\\w+", "%1 %2 %3"]
と表示されてしまいます

printpattern = "%1:%2:%3" # filename:linnum:line
print = proc {|filename,linenum,line|
 STDOUT << (printpattern %filename %linenum %line) << "\n"
}
filepatterns = []
wordpatterns = []
ARGV.options {|opt|
 dest = wordpatterns
 opt.on('-fp' , '--filepattern')       { dest = filepatterns  }
 opt.on('-wp' , '--wordpattern')       { dest = wordpatterns  }
 opt.on('-pp S' , '--printpattern S' , String) {|s| printpattern = s  }
 opt.order! {|s| dest << s }
 p filepatterns
 p wordpatterns
}