http://www.perlmonks.org?node_id=11105959


in reply to How to build a better mousetrap (or a variable to hold a column-measuring scale)

This left-justified variant:
#!/usr/bin/perl -l # https://www.perlmonks.org/?node_id=11105908 use strict; use warnings; my $len = $ARGV[0]; my $new = '----+----|'; $_ = $new x $len; my $i = 0; my $ii; s/ \| (??{ $i += 10; $ii = $i =~ s!.*(?=[^0])!!r; quotemeta '-' x ( -1 + length $ii ); }) / $ii /gex; s/./|/; print;
Output:
|---+----10---+----20---+----30---+----40---+----50---+----60---+----7 +0---+----80---+----90---+----100--+----10---+----20---+----30---+---- +40---+----50---+----60---+----70---+----80---+----90---+----200--+--- +-10---+----20---+----|
This right-justified variant:
#!/usr/bin/perl -l # https://www.perlmonks.org/?node_id=11105908 use strict; use warnings; my $len = $ARGV[0]; my $new = '----+----0'; $_ = $new x $len; my $i = 0; my $space = '-' x 4; my $space_quotemeta = quotemeta $space; s/ $space_quotemeta (?= 0 ) / $i ++; my $ii = $i =~ s!.*(?=[^0])!!r; $space =~ s! (??{ quotemeta '-' x length $ii }) $ !$ii!xr; /gex; s/./|/; print;
Output:
|---+---10----+---20----+---30----+---40----+---50----+---60----+---70 +----+---80----+---90----+--100----+---10----+---20----+---30----+---4 +0----+---50----+---60----+---70----+---80----+---90----+--200----+--- +10----+---20----+---30
Input was '23'.