ブロックとProc.newはそもそも別物です。 lambdaに関してはProc.newと同じようですが若干違いがあります。 この違いを理解しておかないと、ハマる可能性があります。 ブロックとProc.new ブロックとは まずブロックとはdo~endまたは{~}の部分で引数のような形で渡すものです。 以下のコードでは{ puts "block" }がそれに相当します。 また、受け取り側で引数を明示的に書かなくても渡す事ができyieldでブロックを評価する事が出来ます。 おそらくlist.each{ |a| a.hoge }などで使った事があると思います。それがブロックです。