#!/usr/bin/perl -w use strict; my $number = '000'; do { increment( \$number ); print "$number\n"; } until $number eq 'zzzzzzzzzzzzzzzz'; # or some other long string sub increment { my ( $number_ref ) = @_; my @digits = split //, $$number_ref; unshift @digits, undef while @digits < 16; _increment_digit( \@digits, scalar @digits - 1 ); $$number_ref = join '', grep { defined } @digits; } sub _increment_digit { my ( $array_ref, $index ) = @_; if ( ! defined $array_ref->[$index] ) { $array_ref->[$index] = 0; } elsif ( $array_ref->[$index] ge '0' && $array_ref->[$index] lt '9' ) { $array_ref->[$index]++; } elsif ( $array_ref->[$index] eq '9' ) { $array_ref->[$index] = 'a'; } elsif ( $array_ref->[$index] ge 'a' && $array_ref->[$index] lt 'z' ) { $array_ref->[$index] = chr( ord( $array_ref->[$index] ) + 1 ); } elsif ( $array_ref->[$index] eq 'z' ) { $array_ref->[$index] = 0; _increment_digit( $array_ref, ($index - 1) ); } }