sub check_tags_balance { my @tagstack; while(/<(\/)?([^>]+)>/g) { unless($1) { # opening tag push @tagstack, $2; } else { # closing tag unless(@tagstack and $2 eq pop @tagstack) { print "Found an unbalanced closing tag $2\n"; return; } } } if(@tagstack) { print "Missing closing tags for @tagstack\n"; } else { print "Tags balanced.\n"; } } $_ = "I assume everything is ok"; check_tags_balance();