I think what your doing is fraught with problems. Using console IO and stdio on the same handle is much like using sysread and friends alongside <READ> on the same filehandle; it may work some of the time, but the interaction between the two modes of operation will eventualy conflict and produce undefined (and possibly undefinable) results. That's not to say you couldn't make it work, but your unlikely to get much support doing so.

The Console api's allow a process to effectively have multiple consoles. When you create a new console specifying one of the standard handles, you are effectively tying that handle to the Console api's. As you haven't specified any modes, you are getting

GENERIC_READ | GENERIC_WRITE | FILE_SHARE_READ | FILE_SHARE_WRITE by default.

Once you so tie the handle to a console, unless you take steps to untie it, when the console handle goes out of scope, the handle is effectively thrown away (read:closed), hence why making the handle global with our delays the onset of the problem.

I really think that unless you intend using the Console Api's for all your terminal IO, then you would save yourself a lot of grief by solving your problems with Term::ReadKey. Mixing API's the way you are is only likely to lead to more frustration.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller



In reply to Re: Re: Re: Recovering From Win32::Console by BrowserUk
in thread Recovering From Win32::Console by marinersk

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.