2

私は自分のプログラムを手に入れましたkeymap(実際にはまだキーをマッピングしておらず、現在は16進数で表示されているものだけを出力しています):

#!/usr/bin/env perl

use strict;
use warnings;

use Term::ReadKey;
ReadMode 4;
END {
    ReadMode 0; # Reset tty mode before exiting
}

if ($ARGV[0] ~~ ["h", "-h", "--help", "help"]) {
    print "Usage: (h|-h|--help|help)|(code_in codes_out [code_in codes_out]+)\nNote: output codes can be arbitrary length";
    exit;
}

$#ARGV % 2 or die "Even number of args required.\n";

$#ARGV >= 0 or warn "No args provided. Output should be identical to input.\n";

my $interactive = -t STDIN;

my %mapping = @ARGV;

{
    local $| = 1;
    my $key;
    while (ord(($key = ReadKey(0))) != 0) {
        printf("saw \\x%02X\n",ord($key));
        if ($interactive and ord($key) == 4) {
            last;
        }
    }
}

何が起こるかは次のとおりです。

slu@new-host:~/util 20:50:20
❯ keymap a b
saw \x61
saw \x62
saw \x04

そこで私はキーボードでタイプしましたabCtrl+D

slu@new-host:~/util 20:50:24
❯ echo "^D^Da" | keymap
No args provided. Output should be identical to input.
saw \x04
saw \x04
saw \x61
saw \x0A
Use of uninitialized value $key in ord at /Users/slu/util/keymap line 30.

これはどういう意味なのか気になります。Perlがループ条件を「設定」として「カウントしない」だけの場合$keyですか? ここで警告を抑制するためにできることはありますか? 私は知っていno warnings "uninitialized";ます、私はそれを望んでいません。

4

1 に答える 1