my $magic = 'sub { '; foreach my $char (@chars) { $magic .= "\$cnts{$char} += ()= \$_[0] =~ m/$char/g;"; } $magic .= '}'; my $magicsub = eval "$magic"; die "eval to create anon sub failed '$@'" unless defined $magicsub; while( ) { $magicsub->($_); }