> BTW: why does this happen?
> 
>   a = proc { puts "p" }
>   pshooter a  # => p
>   pshooter a { puts "block" }  
>   # => undefined method `a' for main:Object (NoMethodError)

The block associates with 'a': pshooter(a { puts "block"}), so ruby
interprets 'a' as a method. In this case you should use do ... end, it is
more "loose".