$DataRead{'StringRead'} = substr($DataRead{'StringRead'}, -3); #### $DataRead{'StringRead'} = substr($DataRead{'StringRead'}, 0, length($DataRead{'StringRead'}) - 2); #### #!/usr/bin/perl use strict; use warnings; use constant true => 1; use constant TAB => 9; use constant LF => 10; use constant CR => 13; use constant ESC => 27; use constant BACKTAB => -1; $| = true; use Term::HotKey; # # ReadFromKeyboard # # Read a key at Time from the Keyboard # # Arguments: # # Returns: \%DataRead # 'StringRead' => Characters Read # 'ExitValue' => Character That Caused End of Read # # Thanks to Liverpole for the Original Version # sub ReadFromKeyboard { my %DataRead; $DataRead{'StringRead'} = ''; my $CharacterRead = ''; while(true) { $CharacterRead = readkey(); if($CharacterRead) { $DataRead{'StringRead'} .= $CharacterRead; print("\[$CharacterRead\]\[" . ord($CharacterRead) . "\]len\[" . length($CharacterRead) . "\] \[$DataRead{'StringRead'}\]\n"); if($DataRead{'StringRead'} =~ /.*\t|\n|\r|\e\[Z|\eq$/) { if($DataRead{'StringRead'} =~ /.*\e\[Z$/) { $DataRead{'ExitValue'} = -1; $DataRead{'StringRead'} = substr($DataRead{'StringRead'}, -3); } elsif($DataRead{'StringRead'} =~ /.*\eq$/) { $DataRead{'ExitValue'} = 27; $DataRead{'StringRead'} = substr($DataRead{'StringRead'}, 0, length($DataRead{'StringRead'}) - 2); } else { $DataRead{'ExitValue'} = ord(chop($DataRead{'StringRead'})); } last(); } } } return(\%DataRead); } # Main program my $DataRead; $DataRead->{'StringRead'} = ''; while(uc($DataRead->{'StringRead'}) ne 'QUIT') { $DataRead = ReadFromKeyboard(); my $WhatIsIt; if($DataRead->{'ExitValue'} == TAB) { $WhatIsIt = 'TAB'; } elsif($DataRead->{'ExitValue'} == LF) { $WhatIsIt = 'LF'; } elsif($DataRead->{'ExitValue'} == CR) { $WhatIsIt = 'CR'; } elsif($DataRead->{'ExitValue'} == ESC) { $WhatIsIt = 'ESC'; } elsif($DataRead->{'ExitValue'} == BACKTAB) { $WhatIsIt = 'BACKTAB'; } else { $WhatIsIt = 'IDK'; } print("You Entered: \[$DataRead->{'StringRead'}\]\[" . length($DataRead->{'StringRead'}) . "\]\nYou Ended with a \[$WhatIsIt\]\[$DataRead->{'ExitValue'}\]\n"); } __END__