I'm running the following function against a PostgreSQL database and a few tables to come up with a list of addresses that should be notified about messages that match a certain criteria. The most obvious thing for me to do was create a SQL SELECT statement which given some parameters would just return the right values. The issue I ran into is that I need to use the $message -> {'userid'} value more than once. The existing usage I've detailed looks wrong to me and I'm wondering if any of you have suggestions for either easing my mind or better ideas.

sub notify_users { my $message = shift; # Get the list of addresses to notify my @addr = @{$dbh -> selectall_arrayref(q[ SELECT addr FROM email, (SELECT userid FROM usernames WHERE 0 <> position(lower(username) IN ?) AND userid <> ? EXCEPT SELECT userid FROM ignore WHERE ignore_userid = ?) ids WHERE email.userid = ids.userid], undef, lc $message -> {'message'}, $message -> {'userid'}, $message -> {'userid'})}; # flatten the array $_ = $_ -> [0] for @addr; @addr = grep length(), @addr; return unless @addr; .... }

In reply to Style: Passing the same value for multiple DBI placeholders by diotalevi

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.