我正在嘗試撰寫一個小的 Perl 腳本,它需要添加睡眠時間以延遲 for 回圈中的執行命令。
這是示例。
use strict;
use warnings;
use v5.26.1;
my $delay = 10;
my $num = 100;
for (my ($i, $d) = (1, $delay); $i <= $num; $i , $d =5 ) {
say "delaying iteration $i by $d";
sleep($d);
}
輸出也很簡單
delaying iteration 1 by 10
delaying iteration 2 by 15
delaying iteration 3 by 20
delaying iteration 4 by 25
delaying iteration 5 by 30
但是我必須增加每 5 次迭代的睡眠時間示例應該如下所示
前 5 行應該延遲,沒有這樣的睡眠時間
delaying iteration 1 by 0
delaying iteration 2 by 0
delaying iteration 3 by 0
delaying iteration 4 by 0
delaying iteration 5 by 0
接下來的 5 行應該像這樣延遲 5 秒的雨夾雪時間
delaying iteration 6 by 5
delaying iteration 7 by 5
delaying iteration 8 by 5
delaying iteration 9 by 5
delaying iteration 10 by 5
然后每 5 次迭代,睡眠時間應該增加 5 秒。
delaying iteration 11 by 10
delaying iteration 12 by 10
delaying iteration 13 by 10
delaying iteration 14 by 10
delaying iteration 15 by 10
有人可以建議如何讓它以這種方式作業嗎?
uj5u.com熱心網友回復:
然后根據需要更改每 5 次迭代的延遲,例如使用模 (%) 運算子
use warnings;
use strict;
use feature 'say';
my $delay = 0;
my $num = 100;
foreach my $n (1 .. $num) {
say $n;
sleep $delay;
$delay = 5 if $n % 5 == 0; # every 5-th
}
uj5u.com熱心網友回復:
使用嵌套for回圈:
use strict;
use warnings;
use feature 'say';
my $num = 7;
my $d = 0;
my $i = 0;
for my $j (1 .. $num) {
for (1 .. 5) {
$i ;
say "delaying iteration $i by $d";
sleep($d);
}
$d = 5;
}
輸出:
delaying iteration 1 by 0
delaying iteration 2 by 0
delaying iteration 3 by 0
delaying iteration 4 by 0
delaying iteration 5 by 0
delaying iteration 6 by 5
delaying iteration 7 by 5
delaying iteration 8 by 5
delaying iteration 9 by 5
delaying iteration 10 by 5
delaying iteration 11 by 10
delaying iteration 12 by 10
delaying iteration 13 by 10
delaying iteration 14 by 10
delaying iteration 15 by 10
delaying iteration 16 by 15
delaying iteration 17 by 15
etc.
uj5u.com熱心網友回復:
for my $i ( 1.. $num ) {
my $d = int( ( $i - 1 ) / 5 ) * 5;
say "delaying iteration $i by $d";
sleep($d);
}
或者
my $d = 0;
for my $i ( 1.. $num ) {
say "delaying iteration $i by $d";
sleep($d);
$d = 5 if $i % 5 == 0;
}
delaying iteration 1 by 0
[0 second pause]
delaying iteration 2 by 0
[0 second pause]
delaying iteration 3 by 0
[0 second pause]
delaying iteration 4 by 0
[0 second pause]
delaying iteration 5 by 0
[0 second pause]
delaying iteration 6 by 5
[5 second pause]
delaying iteration 7 by 5
[5 second pause]
delaying iteration 8 by 5
[5 second pause]
delaying iteration 9 by 5
[5 second pause]
delaying iteration 10 by 5
[5 second pause]
delaying iteration 11 by 10
[10 second pause]
...
uj5u.com熱心網友回復:
for my $i ( 1.. $num ) {
sleep( 5 ) if $i % 5 == 1 && $i != 1;
say "iteration $i";
}
iteration 1
iteration 2
iteration 3
iteration 4
iteration 5
[5 second pause]
iteration 6
iteration 7
iteration 8
iteration 9
iteration 10
[5 second pause]
iteration 11
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/485467.html
上一篇:多個消費者不丟失訊息
