我想制作一个脚本,将一个一个地键入字符串字母

my $str = 'Test String';
my @spl = split '',$str;
for (@spl){
    print "$_";
    sleep(1);
}
print "\n";


sleep()不起作用!它使我等待了1秒钟以上,并且即时获得了立即的全文,而没有任何延迟。

最佳答案

在循环中,您仅输出2个项目。还有一个事实,就是您的输出可能会被缓冲,因此只有在发送\n时才可以刷新并打印该缓冲区。

尝试将$|设置为非零值,这可能会禁用行缓冲。

例如

$| = 1;
$|++; // alternative often seen


另外,这做同样的事情:

STDOUT->autoflush(1);    # Needs "use IO::Handle;" on older versions of Perl


尽管在这里可能不是问题,但sleep()并不是等待时间的好方法,尤其是在较旧的系统上。正如manual所述,有一些原因导致睡眠时间可能少于或超过1秒。

10-06 09:34