gpt4 book ai didi

Perl 未初始化警告

转载 作者:行者123 更新时间:2023-12-04 05:02:14 24 4
gpt4 key购买 nike

我有我的程序 keymap (它实际上还没有映射任何键,目前只打印出它在十六进制中看到的内容)在这里:

#!/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"; ,我不想那样。

最佳答案

有一个已知错误,警告由 while 的条件表达式发出。循环可能被错误地归因于在 while 条件之前评估的循环中的语句。

发出警告的代码实际上是while的条件循环,ord(($key = ReadKey(0))) != 0 .
ReadKey(0)正在返回 undef ,而您正在尝试获取 ord或者它。

while (1) {
my $key = ReadKey(0);
last if !defined($key) || ord($key) == 0;

printf("saw \\x%02X\n",ord($key));

last if $interactive and ord($key) == 4;
}

关于Perl 未初始化警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com