while (1) { /\G<([^>]+)>/gc and do { start_tag($1); next; } /\G]+)>/gc and do { end_tag($1); next; } /\G([^<]*)/gc and do { body($1); next; } last; }