call Kernel.block_given? instead of block_given? coz of BasicObject