while ((my $begin, my $end) = each %exon_endpoints) { print get_exon($chromosome, $begin, $end), "\n\n"; } sub get_exon { my($chromosome, $begin, $end) = @_; # The arguments to substr are: string, beginning, length return substr($chromosome, $begin - 1, $end - $begin + 1); } #### while ((my $begin, my $end) = each %exon_endpoints) { print substr($chromosome, $begin - 1, $end - $begin + 1), "\n\n"; } #### my $chromosome; get_chromosome(1, \$chromosome); my $get_exon = sub { substr $chromosome, $_[0] - 1, $_[1] - $_[0] - 1; }; while (my @ends = each %exon_endpoints) { print $get_exon->(@ends), "\n\n"; }