小编myk*_*hal的帖子

退格字符怪异

我想知道为什么普通Linux终端中的退格字符实际上不会在打印时擦除字符(通常在键入时有效).

这按预期工作:

$ echo -e "abc\b\b\bxyz"
xyz
Run Code Online (Sandbox Code Playgroud)

(\b评估为退格,也可以插入Ctrl+ V Ctrl+ H- 呈现为^H(0x08))

但是当退格后的字符数量减少时,会发现奇怪的行为:

$ echo -e "abc\b\b\bx"
xbc
Run Code Online (Sandbox Code Playgroud)

它的行为类似于左箭头键而不是退格键:

$ echo -e "abc\e[D\e[D\e[Dx"
xbc
Run Code Online (Sandbox Code Playgroud)

擦除线后退工作正常:

$ echo -e "abc\e[1Kx"
x
Run Code Online (Sandbox Code Playgroud)

事实上,当我在终端输入Ctrl+ V Backspace时,^?(0x7f)产生而不是^H,这是Delascii字符,但是Ctrl+ V Del产生<ESC>[3~,但它是另一个故事..

那么有人可以解释为什么打印的退格字符不会删除字符吗?

(我的环境是xterm的Linux和一些其他的终端仿真器,$TERM== xterm,试图vt100,Linux以及)

terminal text backspace

10
推荐指数
1
解决办法
1万
查看次数

类似方法语法中的 Raku 中缀运算符

在 Raku 中,中运算符可以像函数一样使用,例如:

1 + 2 ;           # 3
infix:<+>(1, 2) ; # 3
[+] 1, 2 ;        # 3
Run Code Online (Sandbox Code Playgroud)

前缀运算符可以与类似方法的语法(methodop)一起使用:

-1 ;             # -1
1.:<-> ;         # -1
Run Code Online (Sandbox Code Playgroud)

因此,(相当学术的)问题是,中运算符是否也可以以类似方法的方式使用,例如1.:<+>(2)(这是错误的)?

咖喱

(1 + *)(2) ;     # 3
Run Code Online (Sandbox Code Playgroud)

……那是函数(某种)定义和调用,而不是方法调用,也不是类似方法的语法。

自定义方法

my method plus(Int $b --> Int){
  return self + $b;
}

1.&plus(2) ;     # 3
Run Code Online (Sandbox Code Playgroud)

……但+不能使用名称,这也不是没有附加函数定义的直接操作符用法。

methods infix-operator raku

10
推荐指数
1
解决办法
151
查看次数

如果不是 Nil,则变量重新分配方法结果

是否有应用和分配对象变量方法调用的惯用方法,但前提是它已定义(方法和结果)?

就像使用安全调用运算符.?定义或运算符//,以及“DRY 原则”——在操作中只使用一次变量?

像这样(但使用另一个变量感觉像是在作弊):

my $nicevariable = "fobar";

# key step
(my $x := $nicevariable) = $x.?possibly-nonexistent-meth // $x;

say $nicevariable;  # => possibly-nonexistent-meth (non-Nil) result or "foobar"
Run Code Online (Sandbox Code Playgroud)

... 并避免andthen,如果可能的话。

syntactic-sugar raku

8
推荐指数
3
解决办法
143
查看次数

Perl:使用Module @list

有人想在use函数语句中使用数组变量代替数组(列表)文字,如:

my @list = qw(foo zoo);
use Module @list;
Run Code Online (Sandbox Code Playgroud)

代替

use Module qw(foo zoo);
Run Code Online (Sandbox Code Playgroud)

所以她写道:

my @consts = qw(PF_INET PF_INET6);
use Socket @consts;
printf "%d, %d\n", PF_INET, PF_INET6;
Run Code Online (Sandbox Code Playgroud)

看似按预期工作:

2,10

然后,她正在使用其他模块,例如Time::HiRes.代替

use Time::HiRes qw(CLOCK_REALTIME CLOCK_MONOTONIC);
printf "%d, %d\n", CLOCK_REALTIME, CLOCK_MONOTONIC;
Run Code Online (Sandbox Code Playgroud)

0,1

她这样做:

my @consts = qw(CLOCK_REALTIME CLOCK_MONOTONIC);
use Time::HiRes @consts;
printf "%d, %d\n", CLOCK_REALTIME, CLOCK_MONOTONIC;
Run Code Online (Sandbox Code Playgroud)

0,0

它突然不起作用,就像它与Socket模块一起工作!这里发生了一件坏事.

(......这是在非严格的环境中.如果她使用use strict,她甚至会出错.另一方面,她在她的第一个看似有效的例子中没有任何暗示 - 即使她在use strict; use warnings; use diagnostics那里.)

现在她想探索这种奇怪的行为.尝试导入空列表:

my @consts = …
Run Code Online (Sandbox Code Playgroud)

perl perl-module

7
推荐指数
1
解决办法
578
查看次数

访问被调用者/这个在 Raku 地图代码/块

是否可以访问 Raku 地图代码块和/或任何代码中的“被调用者”(“this”)?

例如,如果想计算算术平均值

my $data = <1 10 0 7 2> ;
say $data.sum
  / $data ;   # or @$data, same as $data.elems in this numeric context
# OUTPUT: «4?»
Run Code Online (Sandbox Code Playgroud)

分数相加

say $data.map(* / $data).sum
# OUTPUT: «4?»
Run Code Online (Sandbox Code Playgroud)

喜欢

<1 10 0 7 2>.map({ $_ / $this }).sum   # but there's no $this
Run Code Online (Sandbox Code Playgroud)

或者

<1 10 0 7 2>.map( * / $this ).sum
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有一种惯用的方法可以仅通过对<…>数据文字的一系列方法调用或不同的方式来实现,而无需将数据存储在变量中?

introspection raku

7
推荐指数
2
解决办法
239
查看次数

获取ruby函数对象本身

在Ruby中,一切都应该是一个对象.但是我有一个很大的问题,就是通常的方式来定义函数对象

def f
    "foo"
end
Run Code Online (Sandbox Code Playgroud)

与Python不同,f是函数结果,而不是函数本身.因此,f(),f,ObjectSpace.f都是"foo".还f.methods返回字符串方法列表.

如何访问函数对象本身?

ruby function object

6
推荐指数
1
解决办法
4425
查看次数

css选择带有类的元素的所有后代(星号)

我想用这种方式用class ="x"选择元素的所有后代元素:

<!DOCTYPE html>
<html>
<head>
  <style type="text/css">
    .x * {
      color: red;
    }
  </style>
</head>
<body>
  a
  <p>
    b
     <p class="x">
        c
        <p> should be red </p> foo
     </p>
  </p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这些元素并不适用.也*.x *没有.

我究竟做错了什么?

css selector

3
推荐指数
1
解决办法
8591
查看次数

编译的解释语言

是否有编程语言,具有可用的交互式解释器,即使它可以编译为机器代码?

interpreter programming-languages compilation read-eval-print-loop

3
推荐指数
3
解决办法
716
查看次数

如何使用openssl识别证书的RSA签名中使用的填充方案?

证书的签名可以使用不同的RSA填充方案,如PCKS1.5,PSS等.使用openssl工具,如何识别RSA签名中使用的填充方案?

linux openssl cryptography rsa certificate

3
推荐指数
1
解决办法
3554
查看次数

如何在Haskell中获取无限列表的最后一项与有限列表连接?

在Haskell中,如何有效地获取与有限列表连接的无限列表的最后一项(?)?

last 不工作,它显然从头部迭代,所以以下永远不会完成:

-- let's have a list of all natural numbers,
-- with zero appended
arr = [1..] ++ [0]
-- it was fast! now get the last item, should be easy
res = last arr
Run Code Online (Sandbox Code Playgroud)

编辑:我想知道Haskell的内部表示[1..] ++ [0]是什么,它最初"完全没有评估"?如果它在内部将其表示为两个(未评估的)列表的"序列",则该last函数可以立即获取最后一个项目的最后一项.

haskell

2
推荐指数
1
解决办法
219
查看次数

Ploneinfo(如phpinfo)

在Plone(v 4.x)中创建"页面"的最明确的(但不是非常hackish - unPlonish)方式是什么,这将显示Plone的内部信息?我想生成一个页面文档,它会粘贴dir()(或任何我自己的函数)结果<pre/>或类似的东西.直截了当...我的意思是,无需创建Plone产品或直接修改服务器文件 - 只需使用ZMI ..

plone

1
推荐指数
1
解决办法
88
查看次数

使用模块中的Perl哈希参数

一些Perl模块使用hash参数导入,如:

use Test::Simple tests => 1
Run Code Online (Sandbox Code Playgroud)

这与记录的use使用变体不一致:

use Module VERSION LIST
use Module VERSION
use Module LIST
use Module
use VERSION
Run Code Online (Sandbox Code Playgroud)

从命名模块将一些语义导入当前包,通常通过将某些子例程或变量名称别名到包中.

而在我们的例子中,我们使用哈希而不是列表,至少在语义上 - 当然,

use Test::Simple qw(tests 1)
Run Code Online (Sandbox Code Playgroud)

是等价的,但对于人类局外人来说是没有意义的,他们希望列表是要导入的名称列表.

你如何解释/捍卫这种偏差?是否允许使用参数导入模块是推荐的语法糖?

perl arguments perl-module

1
推荐指数
2
解决办法
175
查看次数