sub distance { ... do { return $1 + distance($_) if s/\(#:(\d+)\)/#/ } until ... ... } #### sub butter { my $_ = shift; return $1 + butter($_) if s/(\d+)//; return 0; } print butter 'effect / 7ACV06';