You don't need to dereference the filehandle with *. If you leave it out the code should work:
#!/usr/bin/perl -w
use strict;
open TMP, "> file.tmp" or die "Couldn't open file: $!\n";
my %hash;
$hash{tmpfile} = \*TMP;
print {$hash{tmpfile}} "hello, world\n";