while (<>) { no warnings 'uninitialized'; /^\s*<\s*TEMPLATE\s+NAME="(.*?)"\s*>/i .. /^\s*<\s*\/\s*TEMPLATE\s*>/i and $h{$1} .= $_; } # cleanup delete $hashref->{''}; s/^\s*<\s*TEMPLATE\s+NAME="(.*?)"\s*>\s*//i for values %$hashref;