> Is there any built in functionality for iteration that will allow me to 
> detect when I am on the last element?  This would not be hard for an Array, 
> using array.length, but what about a Hash?  How would I know when I am at 
> the last element?

Here is a module that implements it, but you should include it in every
class where you want #each to behave that way :-/. (And some #each-like
methods (for example, String#each_byte, don't work at all...)

oe.rb:
#!/usr/bin/ruby

class Object
	def last?
		Thread.current.last_iteration?
	end
	private :last?
end

class Thread
	def last_iteration?
		@__last_iteration__
	end
end

module EachWithLast
	def EachWithLast.append_features(klass)
		old_each="each_"+rand(10000).to_s+Time.now.usec.to_s
		klass.class_eval <<-FINISH
			alias_method :#{old_each}, :each
	
			def each(*a,&b)
				element = nil
				flag = false
				#{old_each}(*a) { |e|
					Thread.current.instance_eval {
						@__last_iteration__=false
					}
					b.call element if flag
					flag=true
					element=e
				}
				if flag
					Thread.current.instance_eval {
						@__last_iteration__=true
					}
					b.call element
					Thread.current.instance_eval {
						@__last_iteration__=false
					}
				end
			end
		FINISH
	end
end

class Array; include EachWithLast end

a = [1,2,3,4,5].select {|e| last? }
p a  # => [5]

class Range; include EachWithLast end
class String; include EachWithLast end

for i in 1..10
	print "and the last is: " if last?
	print i
	"ds\njkd\njsk\nsd".each { |l| puts " - the last line is #{l}" if last? }
end

class File; include EachWithLast end
File.open("oe.rb") { |f|
	count = 0
	f.each { |line|
		count += line.length
		print "last line: #{line}" if last?
	}
	print "total chars: #{count}\n"
}
#THE LAST LINE