メソッドに複数の値を渡したいし、メソッドから複数の戻り値を貰いたい

ググったら、一発でした。
プログラミング言語 Ruby リファレンスマニュアル

複数の戻り値の渡しかた

def hoge(*z)
  if z.empty?
    puts "YES!!"
  else
    puts "NO!!"
    puts z.first
  end
end

def hoge2(x,*z)
  puts x
  puts z.first
end

hoge("a","b","c")   # => NO!! a
hoge()              # => YES!!
hoge2("d","e","f")  # => d e

複数の戻り値の貰いかた

def hoge
  return 1,2,3
end

a = hoge()

puts a[0]   # => 1
puts a[1]   # => 2
puts a[2]   # => 3

ちょっと気になったことを

最初の返り値だけ変数に、他は配列に代入なんてできない。

a,b = hoge()

このように返り値を受けると、3番目の引数は受け取ることができない。
bが配列になって、

puts a    # >= 1
puts b[0] # >= 2
puts b[1] # >= 3

このようなことにはならない。
正しくは以下。

puts a # >= 1
puts b # >= 2

2010年9月28日追記

id:keyesberryさんに教えて貰う。

a, *b = hoge()とすればbで配列を取れます

ごめんなさい。できます。