Even if your second example worked, it wouldn't work. :-)
Since you are re-creating the hash every time through the loop, you would be (eternally) returning the first key-value pair from the array. This should happen with any case where you are creating the hash within the 'while' statement, which makes your third example, IMO, decidedly Perl-ish.
(And of course the normal caviat about possible duplicate keys when converting an array to a hash still stands.)