Вопрос: что-то делать (и что-то происходит с вызовом rand()
) несколько раз без использования цикла. Подразумевается и без повторения источника. Ни один из приведенных выше ответов на самом деле не отвечает на этот вопрос. Они либо повторяют источник, либо скрывают зацикливание. Вот общий подход, который смягчает повторение и не скрывает зацикливание (реализуя его с использованием вычисленного goto, или регулярного выражения, или рекурсии, и т. Д.). Я называю этот подход «управляемым повторением».
100 имеет четыре основных фактора: 2 * 2 * 5 * 5 == 100. Итак, нам нужны два менеджера повторения, пять и два:
sub two{ my $y=shift; ($y->(), $y->()) }
sub five{my $y=shift; ($y->(), $y->(), $y->(), $y->(), $y->()) }
затем вызовите их - мы не рекурсивны, потому что вырожденный случай рекурсии представляет собой циклический тест - просто вызов их:
my @array = five(sub{five(sub{two(sub{two(sub{rand()})})})});
Вот вам общий способ вызывать что-то заданное количество раз без использования цикла, скорее, путем делегирования повторения эффективным и контролируемым образом.
Вопрос для обсуждения: в каком порядке должны быть пятерки и двойки и почему?