$PROGRAM_NAME と __FILE__

結論

$PROGRAM_NAME はmainの実行ファイル名。
__FILE__ はそのコードが書かれているファイルの名前。

検証

以下をを同じディレクトリにおいて実行。

test.rb

#!/bin/env ruby

require './test_class'

p $PROGRAM_NAME
p __FILE__

p 'Now call class.'

tc = TestClass.new
tc.name

test_class.rb

class TestClass
  def name()
    p $PROGRAM_NAME
    p __FILE__
  end
end

実行結果

$ ./test.rb
"./test.rb"
"./test.rb"
"Now call class."
"./test.rb"
"/usr/local/vldmp/script/test/test_class.rb"