eval(q="puts'eval(q=%p)'%q")
は当然、
eval(q="pu ts'eval(q=%p)'%q")
などと適当な空白や改行を入れると、実行できなくなったり出力が変わってしまう
単に eval する前に空白を除去してやれば良い
eval(q="pu ts'eval(q=%p)'%q".split.join(""))
これをするとプログラム中で空白や改行を使えなくなるが、たいした問題ではない