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

The following perl script takes a long time in the 'getc' function while executing in an HP-UX 11i v2 (Itanium) machine.

*** BEGIN SCRIPT ***
#! /usr/local/bin/perl -w use strict; use DBI; use POSIX qw(strftime); use IO::Handle; $_=`uname -s -r`; chomp; tr/ /_/; my $sttycooked = `/bin/stty -g`; sub prompt { # print string $_[0], and look for one of the chars in $[1 .. $#_] return (-1) unless (@_ > 1); while (1){ print "$_[0] "; system "/bin/stty -icanon eol \001"; my $x = getc(STDIN); system "/bin/stty $sttycooked"; for my $i (1 .. $#_){ return( -1) if (length( $_[$i]) > 1); return( $x) if ($x eq $_[$i]); } } } # main $_ = prompt ("Build 64bit version? (y/n)","y","n"); if (/[yY]/) { print "You have choosen 64bit version\n"; } else { print "You have choosen 32bit version\n"; }
*** END SCRIPT ***

Is there any known performance problem about it?

Thanks in advance!

20060719 Janitored by Corion: Added formatting, code tags, as per Writeup Formatting Tips

Replies are listed 'Best First'.
Re: Perl performance in HP-UX
by Fletch (Bishop) on Jul 19, 2006 at 12:26 UTC

    You're shelling out to call stty twice. On a heavily loaded machine doing that could probably take a noticeable amount of time. Consider using Term::ReadKey or the POSIX termios stuff instead.