找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 5779|回复: 9

[问题求助] [ 已解决 ] Perl循环print显示时,<stdin>有效,sleep失效问题?

[复制链接]
发表于 2025-5-14 20:05:11 | 显示全部楼层 |阅读模式
本帖最后由 zzz19760225 于 2025-5-14 23:08 编辑


sleep模式:

  1. a0:
  2. $b1="123";$b2="456";$b3="789";goto a1;
  3. a1:print $b1;sleep(2);print $b2;sleep(2);print $b3;sleep(2);goto a0;
复制代码

<stdin>模式:

  1. a0:
  2. $b1="123";$b2="456";$b3="789";goto a1;
  3. a1:print $b1;sleep(2);print $b2;sleep(2);print $b3;<stdin>;goto a0;
复制代码

之前有添加\n换行,也可以了,

  1. a0:
  2. $b1="123";$b2="456";$b3="789";goto a1;
  3. a1:print "$b1\n";sleep(2);print "$b2\n";sleep(2);print "$b3\n";sleep(2);goto a0;
复制代码

是不是必须得加换行啊?
发表于 2025-5-14 22:55:39 | 显示全部楼层
perl的标准输出默认是行缓冲的,输出内容会先放在缓冲区,当碰到换行时,会直接把内容显示出来,没有碰到换行时,得等到缓冲区满了才显示出来,可以手动刷新缓冲或取消缓冲

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 谢谢,经常听到缓冲这词,原来是这个原因。

查看全部评分

 楼主| 发表于 2025-5-14 23:06:45 | 显示全部楼层

  1. # 启用自动刷新
  2. $| = 1;
  3. a0:
  4. $b1="123";$b2="456";$b3="789";goto a1;
  5. a1:print "$b1";sleep(2);print "$b2";sleep(2);print "$b3";sleep(2);goto a0;

  6. 123456789123456789
复制代码
非常感谢大佬的帮助,使用百度里的自动刷新语句,这样可以不需要必须换行,可以一行的行输出了。
发表于 2025-5-15 08:46:18 | 显示全部楼层
  1. use utf8;
  2. use Encode;
  3. use Modern::Perl;
  4. STDOUT->autoflush(1);
复制代码
我都默认有这几行的了

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 感谢版主提供的经验值!

查看全部评分

 楼主| 发表于 2025-5-15 10:37:44 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-5-15 11:01 编辑


  1. use utf8;
  2. use open ':std', ':encoding(UTF-8)';
  3. use Modern::Perl;
  4. my $名字 = "张三";
  5. print "$名字\n";
  6. <STDIN>;
复制代码
请帮忙看看,想用中文作为变量名,结果是经典的小黑窗一闪就结束。说是正确的啊,但实际执行不能再现,不知道是不是电脑系统的问题,还是程序编制的问题,或是安装版与第三方的差别问题。WIN764,第三方perl5.18.2
求正确中文变量实现?
发表于 2025-5-15 15:39:15 | 显示全部楼层
回复 5# zzz19760225


    没有Modern:erl
去掉use Modern::Perl;那行
文件编码保存为utf8

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 感谢,可以运行输出了!

查看全部评分

 楼主| 发表于 2025-5-15 18:35:36 | 显示全部楼层
回复  zzz19760225


    没有Modern:erl
去掉use Modern:erl;那行
文件编码保存为utf8
Five66 发表于 2025-5-15 15:39



直接显示结果为数字

  1. use utf8;
  2. use Encode;
  3. STDOUT->autoflush(1);
  4. $名字 = "123";
  5. print "$名字\n";
  6. <STDIN>;
复制代码

但是显示汉字,可能需要高版本

  1. use utf8;
  2. use open ':std',':encoding(UTF-8)';
  3. $名字 = "张三";
  4. print "$名字\n";
  5. <STDIN>;
复制代码
发表于 2025-5-15 19:11:11 | 显示全部楼层
人家都提供编码选项了,显示不出来当然不是版本问题。
  1. use utf8;
  2. use open ":std", OUT => ":encoding(gbk)";
  3. STDOUT->autoflush(1);
  4. $变量 = "张三";
  5. print "$变量\n";
  6. <STDIN>;
复制代码
或者
  1. use utf8;
  2. STDOUT->autoflush(1);
  3. binmode(STDOUT, ":encoding(gbk)");

  4. $变量 = "张三";
  5. print "$变量\n";
  6. <STDIN>;
复制代码

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 感谢!

查看全部评分

发表于 2025-5-15 19:37:55 | 显示全部楼层
回复 7# zzz19760225


    只是乱码罢了 ,cmd默认是936代码页(对应gbk/gb2312编码) .把utf8的中文当成gbk的中文来显示 ,出现了乱码
可以将

  1. use open ':std',':encoding(UTF-8)';
复制代码
换成

  1. use open ':std', ':encoding(gbk)';
复制代码
标准流编码全部使用gbk ,当然也可以切换代码页(可能需要更改字体)或转换utf8中文

评分

参与人数 1技术 +1 收起 理由
zzz19760225 + 1 谢谢!

查看全部评分

 楼主| 发表于 2025-5-15 19:38:42 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-5-15 19:44 编辑
人家都提供编码选项了,显示不出来当然不是版本问题。或者
523066680 发表于 2025-5-15 19:11



感谢版主的无私帮助!



能完成两个无头绪问题,感谢两位大佬。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:02 , Processed in 0.024146 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表