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'. |