gpt4 book ai didi

encoding - Raku:如何读取STDIN原始数据?

转载 作者:行者123 更新时间:2023-12-02 22:12:39 25 4
gpt4 key购买 nike

我如何在 Raku 中编写这个 Perl5 代码?

my $return = binmode STDIN, ':raw';
if ( $return ) {
print "\e[?1003h";
}
<小时/>

对cuonglm的回答发表评论。

我已经在使用read:

my $termios := Term::termios.new(fd => 1).getattr;
$termios.makeraw;
$termios.setattr(:DRAIN);

sub ReadKey {
return $*IN.read( 1 ).decode();
}

sub mouse_action {
my $c1 = ReadKey();
return if ! $c1.defined;
if $c1 eq "\e" {
my $c2 = ReadKey();
return if ! $c2.defined;
if $c2 eq '[' {
my $c3 = ReadKey();
if $c3 eq 'M' {
my $event_type = ReadKey().ord - 32;
my $x = ReadKey().ord - 32;
my $y = ReadKey().ord - 32;
return [ $event_type, $x, $y ];
}
}
}
}

但是将 STDIN 设置为 UTF-8 时,我会收到 $x$y 大于 127 - 32 的错误:

Malformed UTF-8 at ...

最佳答案

您可以使用method read()来自class IO::Handle执行二进制读取:

#!/usr/local/bin/perl6

use v6;

my $result = $*IN.read(512);
$*OUT.write($result);

然后:

$ printf '1\0a\n' | perl6 test.p6 | od -t x1
0000000 31 00 61 0a
0000004

在 Perl 6 中,您不需要 binmode,因为您何时可以决定以二进制或文本形式读取数据,取决于您使用的方法。

关于encoding - Raku:如何读取STDIN原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893587/

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