&get_subs('spider.pl', \@arr); print @arr[0]; sub get_subs { my ($start, $n, $inp, $path, $p); $path = shift; $p = shift; open(INP, 'spider.pl') || die; $inp = ' ' . join('', ); close(INP); while ($inp =~ /[\n ]sub[\n ]/g) { $start = pos($inp) - 4; $n = 1; pos($inp) = index($inp, '{', pos($inp)) + 1; while ($inp =~ /(}|{)/g) { if ($1 eq '}') { if (!(--$n)) { last; } } else { $n++; } } push(@$p, substr($inp, $start, pos($inp) - $start)); } }