Problem with Win32::Console and END block.

R

Richard S Beckett

I want to set my dos window up with 80 cols and 100 lines, but when I do I
break my END block. Here's an example...

use strict;
use warnings;
$| =1;

# use Win32::Console;
# my $BUFFER = new Win32::Console(STD_OUTPUT_HANDLE);
# $BUFFER->Size(80,100);

for (1..5) {print "."; sleep 1}
exit;
END {print "\n\nPress Enter\n"; <STDIN>;}

In the above form it works. BUT remove the comments from the first 2 or 3
(commented) lines, and the PRINT statement in the END block stops working.
The <STDIN> still works, though.

What am I doing wrong _this_ time? ;-)

W2K, active perl V5.8.1 build 807.

Thanks.
 
B

Brian Helterline

Richard S Beckett said:
I want to set my dos window up with 80 cols and 100 lines, but when I do I
break my END block. Here's an example...

use strict;
use warnings;
$| =1;

# use Win32::Console;
# my $BUFFER = new Win32::Console(STD_OUTPUT_HANDLE);
# $BUFFER->Size(80,100);

for (1..5) {print "."; sleep 1}
exit;
END {print "\n\nPress Enter\n"; <STDIN>;}

In the above form it works. BUT remove the comments from the first 2 or 3
(commented) lines, and the PRINT statement in the END block stops working.
The <STDIN> still works, though.

What am I doing wrong _this_ time? ;-)

Richard,
Win32::Console takes an "all or nothing" approach so when a console window
is closed or destroyed, STDIN/STDOUT get closed.
If your program wants to continue "outside" of the console, then you need
to dup it before calling new. The code below works (AS 5.6.1)

use strict;
use warnings;

use Win32::Console;

BEGIN {
$| =1;
open(CPY, ">&STDOUT") or die "can't dup STDOUT $!";
select CPY;
$| = 1;
}
print "\nOutput to STDOUT before Console.\n";

my $BUFFER = new Win32::Console(STD_OUTPUT_HANDLE);
$BUFFER->Size(80,100);

for (1..5) {print "."; sleep 1}
open(STDOUT, ">&CPY") or die "can't reopen STDOUT $!";
select STDOUT;
$|=1;
print "\nOutput to STDOUT after Console.\n";
exit;
END {print CPY "\n\nPress Enter\n"; <STDIN>;}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top