use strict; use warnings; my %identifiers; undef $/; undef @identifiers{ /((?:sub\s+|[\$@%])[a-zA-Z_][a-zA-Z_0-9]*)/g } while <>; print join "\n", keys %identifiers;