On Fri, 24 Jul 2009 04:24:24 +0800,
wrote:
>$ perldoc -f sprintf
> # Format number with up to 8 leading zeroes
> $result = sprintf("%08d", $number);
>OK, but how do I do
> # Format number with up to 8 leading underscores
>or any arbitrary character?
>OK, I figured it out,
>$ perl -wle '$_ = "00000050"; print; while (s/(^0*)0/$1_/) { }; print;'
>00000050
>______50
>Geez.
I guess you could still use printf without having to do regex.
Following the 8-length strategy:
perl -wle "$_ = 50; print; printf (\"%s%d\", '_' x (8 - length), $_);"
50
______50
Or, it could be generalized:
----------------------
use strict;
use warnings;
my $number = 5000;
my $result = sprintf ("%s%d", '_' x (8 - length $number), $number);
print "$number\n$result\n";
printf ("%s%d \n", fmt('_',13,$number), $number);
printf ("%s%d \n", fmt('_',2,$number), $number);
printf ("%s%d \n", fmt(',',13,$number), $number);
sub fmt {
$_[0] x ($_[1] - length $_[2])
}
__END__
5000
____5000
_________5000
5000
,,,,,,,,,5000
--------------------
-sln