in reply to Returning the value of a placeholder with select

One way is to use bind_col or bind_columns:
$sth->execute($id) or err_trap; $sth->bind_col(1, \my $e_mail); while ($sth->fetch) { print "$e_mail\n"; }
Or without bind_col:
while (my ($e_mail) = $sth->fetchrow_array) { ...
Also, I notice you're checking for errors on the execute, but not on the prepare. That's a sign that you may be missing something, and maybe should consider using RaiseError (see the DBI docs) and maybe HandleError also.