Ось рішення, яке не повинно знаходитися в одразу циклі, що охоплює, і дозволяє уникнути надмірності вказівки заповнювача стану більше одного разу, якщо це вам не потрібно.
do_this if ($first_time_only ||= [true]).shift
Його обсяг відповідає власнику: $first_time_onlyбуде глобально один раз; @first_time_onlyбуде один раз для екземпляра, і first_time_onlyбуде один раз для поточного обсягу.
Якщо ви хочете перші кілька разів тощо, ви можете легко [1,2,3]визначити, якщо вам потрібно розрізнити, в якій з перших ітерацій ви перебуваєте, або навіть щось химерне, [1, false, 3, 4]якщо вам потрібно щось дивне.