The problem is that print is using what is known as the "indirect object syntax", which requires a complex lookahead on Perl's part. The result is that complex operations that return a scalar are not going to do what you expect.

See the section labelled WARNING in perlobj for details. As for solutions, you can use the one that you stumbled on of putting the filehandle into a scalar, the block syntax suggested by another person which looks like:

print {$self->{_handle}} "string here";
Or you can take a speed hit and use IO::Handle and then
$self->{_handle}->print("string here");
Note that the last causes a speed hit, and its internal implementation causes some issues that tye has a complex fix for.

In reply to Re (tilly) 1: dereferencing file handles by tilly
in thread dereferencing file handles by Ryszard

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.