小编sgs*_*sax的帖子

隐藏用户输入

我正在尝试获取一个脚本,该脚本在本机Windows shell和cygwin shell(通过ssh)中都有效,它提示并读取用户输入的密码.到目前为止,我尝试了以下方法:

  1. 使用Term :: ReadKey并将ReadMode设置为'noecho'
    • 结果:返回错误GetConsoleMode failed并退出
  2. 使用Term :: ReadPassword :: Win32
    • 结果:挂起并且从不提供提示或读取输入
  3. 使用IO :: Prompt
    • 结果:返回错误Cannot write to terminal并退出
  4. 使用Term :: InKey
    • 结果:返回错误Not implemented on MSWin32: The handle is invalid并退出

所有这些都在本机Windows shell(命令提示符或电源shell)中工作,但当我在服务器的ssh会话中时,它们都不起作用.

真的,这是我最感兴趣的,让它在远程ssh会话中工作.

我通过安装在Windows服务器(2003 R2)上的cygwin获得ssh.我正在使用草莓perl而不是cygwin perl(cygwin perl打破了我需要在Windows中本机运行的其他perl脚本,而不是通过ssh).

我最好的猜测是cygwin + Windows正在使用草莓perl,因为它无法分辨它所处的环境.我正在寻找其他sshd + Windows解决方案来探索这个问题.

这些是我在搜索中找到的所有方法.是否还有其他人隐藏用户输入的方法?

windows ssh perl hidden cygwin

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

如何取消引用从类方法返回的哈希?

我有一个类,返回一个哈希的方法.通常,我会得到如下结果:

%resp = $myclass->sub($foo);
Run Code Online (Sandbox Code Playgroud)

然后像这样访问返回的哈希的成员:

$resp{key}{subkey};
Run Code Online (Sandbox Code Playgroud)

在2d哈希的情况下.

我认为必须有一种方法将它组合成一条优雅的线,如下所示:

$myclass->sub($foo)->{key}{subkey}
Run Code Online (Sandbox Code Playgroud)

这显然没有被正确解除引用,因为Perl在尝试运行代码时返回此信息:

Can't use string ("1/8") as a HASH ref

在尝试随机解引用序列时,通过在Perlmonks上查看"References quick reference",我提出了以下内容,Perl没有抱怨,但也没有返回我正在寻找的内容:

$%{$myclass->sub($foo)}->{key}{subkey}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我神奇的解引用转义序列是做什么的吗?

perl hash class dereference

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

如何取消引用已传递给子例程的Perl哈希引用?

我还在尝试解决我的哈希解除引用问题.我目前的问题是我现在将hashref传递给sub,我想在该sub中取消引用它.但我找不到正确的方法/语法来做到这一点.在sub中,我想迭代哈希键,但hashref的语法与哈希相同,我知道该怎么做.

所以我想要的是这样做:

sub foo {
    %parms = @_;
    foreach $keys (key %parms) { # do something };
}
Run Code Online (Sandbox Code Playgroud)

但是传入hashref而不是散列.

任何指针(双关语)都是受欢迎的.

谢谢.

perl hash dereference

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

如何从哈希散列中映射(和排序)值?

我有哈希哈希,如下:

%hash = ( a  => { b => 1, c =>2, d => 3},
          a1 => { b => 11, c =>12, d => 13},
          a2 => { b => 21, c =>22, d => 23} )

我想提取"b"元素并将其放入数组中.现在,我正在遍历哈希来执行此操作,但我认为我可以通过使用map来略微提高效率.我很确定如果这是一个哈希数组,我会使用这样的东西:

@hasharray = ( { b => 1, c =>2, d => 3},
               { b => 11, c =>12, d => 13},
               { b => 21, c =>22, d => 23} )
@array = map { …

sorting perl map hash-of-hashes

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

标签 统计

perl ×4

dereference ×2

hash ×2

class ×1

cygwin ×1

hash-of-hashes ×1

hidden ×1

map ×1

sorting ×1

ssh ×1

windows ×1