Ah, this is a "fun" list issue :-)

The problem is your use of the || operator. It puts its left hand side in scalar context. The left hand side is the list ($id, $phone). A list in scalar context returns its last element, in this case $phone, which in the calling code gets assigned to $id, and $phone gets nothing (undef). (BTW, you would have come closer to identifying this issue if you had printed $id as well.)

The fix is two parts: change || to the lower-precedence or, and change the return 0 statements in the sub to plain return; statements. The reason for the latter is that in list context, it will return the empty list. If you continued to return 0, then the returned list still has one element, and the error would not be detected.

Of course, another, probably better possibly better fix is to make your code more explicit:

my ($id, $phone) = some_func(); die "oops" unless defined $id; # or whatever the error condition is

In reply to Re: refuses to return me 2 values from subroutines by Anonymous Monk
in thread refuses to return me 2 values from subroutines by PerlBroker

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.