p、ppを使うと1.9と1.8で動作が微妙に違う

これは仕様なのか?

#hoge.rb 
#!/usr/bin/env ruby
#-*- encoding: utf-8 -*- 

require 'pp'

class Array
  def hoge
    self.map do |v|
      v*2
    end
  end

  def hoge2
    p ary = self.map do |v|
      v*2
    end
    ary
  end

  def hoge3
    ary = self.map do |v|
      v*2
    end
    p ary
    ary
  end

  def hoge3
    pp ary = self.map do |v|
      v*2
    end
    ary
  end

  def hoge4
    ary = self.map do |v|
      v*2
    end
    pp ary
    ary
  end
end

ary = [1,2,3,4,5]
p ary.hoge
p ary.hoge2
p ary.hoge3
p ary.hoge4


実行すると微妙に動作が異なる。
デバッグしていてちょっとビックリした。

$ ruby1.8 ./hoge.rb 
[2, 4, 6, 8, 10]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]
$ ruby ./hoge.rb 
[2, 4, 6, 8, 10]
#
#
#
#
[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]


あともう1つ発見。
ppって空の配列は表示出来ないのを始めて知った。

$ irb1.8 
irb(main):001:0> pp 
NoMethodError: undefined method `pp' for main:Object
        from (irb):1
        from :0
irb(main):002:0> exit
$ irb
irb(main):001:0> pp 
NoMethodError: undefined method `pp' for main:Object
        from (irb):1
        from /opt/ruby1.9.1/bin/irb:12:in `
' irb(main):002:0> exit