aaAzhyd has asked for the wisdom of the Perl Monks concerning the following question:

I am calling a subroutine from another script that I call from my main script, and I make sure to make a endwin(); call before the subroutine runs, but ... Any print statements at this point do not work, until I hit a ctrl-c and exit out of the program. Then all the print statements appear .. Weird, as it seems like it isn't making the endwin(); call until after I exit .. Any suggestions ?

Replies are listed 'Best First'.
Re: ncurses dilemma
by AgentM (Curate) on Mar 15, 2001 at 09:34 UTC
    endwin() doesn't exit (obviously) nor does it handle STDOUT/STDERR/STDIN data. Your printed statements are stored by the shell until it is able to print them, namely when your program "let's go" of the terminal. If you redirect STDOUT to a file, you'd see that it appears immediately. It would be best if you could use the Curses calls instead of printing, since that is the point of Curses, but if you decide that you can't do that, try a wrefresh() after the print output AND unbuffer STDOUT. It's usually best to avoid endwin() since it means you wish to leave the pretty Curses environment. I have never found the need to do that- perhaps if you provide an example of why you'd need to do this....

    If you need printf capability, use printw(). As always, hit your local docs- of which, currently, the C versions are far more complete.

    AgentM Systems nor Nasca Enterprises nor Bone::Easy nor Macperl is responsible for the comments made by AgentM. Remember, you can build any logical system with NOR.
(tye)Re: ncurses dilemma
by tye (Sage) on Mar 15, 2001 at 19:43 UTC

    Sounds like your output is buffered. See the documentation for $| or just use something like:

    use IO::Handle; STDOUT->autoflush(1);
            - tye (but my friends call me "Tye")