試してないけど、C/C++ ばっかりの自分には、
 $g_persons.each { |p| printf( "name = %s, age = %s\n", p.name, p.age) }
なら分かるけど、
 $g_persons.each{|p|puts 'name = %s, age = %s' % p.to_a}

は、% p.to_a の部分がまったく分からないといっても過言ではない。

' の後ろの % って何? p.to_a も分からない。