use Data::Dumper; my $file = "input2.txt"; open(my $f, '<', $file) or die "cannot open file"; my $fh = <$f>; my @ranges = split(/,/, $fh); my $totalPhony = 0; foreach my $range (@ranges) { $totalPhony += getPhonyPins(split(/-/, $range)); } print "Total phony: $totalPhony\n"; sub getPhonyPins { ($startInt, $endInt) = @_; my $totalphony = 0; my $found = 0; NEXT: foreach my $i ($startInt .. $endInt) { my @digits = split (//, $i); # check for odd digits (cant have pairs) my $digits = @digits; if ($digits % 2 == 1) { next; } for (my $len = 1; $len <= $digits/2; $len++) { next unless $digits % $len == 0; # only use divisors my $pattern = substr($i, 0, $len); my $expected = $pattern x ($digits / $len); if ($i eq $expected) { $totalphony += $i; $found += 1; next NEXT; } } } print "Found: $found ($totalphony indv) for ($startInt, $endInt)\n"; return $totalphony; }