Perl for循环迭代如何实现每5次批次阶梯递增sleep延迟时长
Perl脚本按批次阶梯递增sleep时长的实现方案
你原脚本的问题是每次循环迭代都给延迟值加5,不符合「每5次迭代为一个批次统一延迟、每跨一个批次延迟加5秒」的规则,直接通过迭代序号计算对应延迟即可,不需要在循环增量步维护累加的延迟变量,逻辑更稳定。
修改后完整代码
use strict; use warnings; use v5.26.1; my $num = 100; for my $i (1..$num) { # 按迭代序号计算当前批次对应的延迟 my $d = int(($i - 1) / 5) * 5; say "delaying iteration $i by $d"; sleep($d); }
逻辑说明
延迟计算规则完全匹配需求,验证如下:
- 第1-5次迭代:
($i-1)取值0-4,除以5取整结果为0,计算得延迟$d=0 - 第6-10次迭代:
($i-1)取值5-9,除以5取整结果为1,计算得延迟$d=5 - 第11-15次迭代:
($i-1)取值10-14,除以5取整结果为2,计算得延迟$d=10 - 后续每完成5次迭代,取整结果自动加1,延迟对应增加5秒,完全符合阶梯递增规则
如果你习惯使用原脚本的C风格for循环写法,也可以用以下版本,运行效果完全一致:
use strict; use warnings; use v5.26.1; my $num = 100; for (my $i = 1; $i <= $num; $i++) { my $d = int(($i - 1) / 5) * 5; say "delaying iteration $i by $d"; sleep($d); }
内容的提问来源于stack exchange,提问作者rshdzrt
相关产品推荐
相关产品推荐

