Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
executable file 215 lines (149 sloc) 4.03 KB
#!/usr/bin/perl -w
#=======================================================================
# zeropad
# File ID: 7028de4a-f744-11dd-a3ac-000475e441b9
# Pads all integers read from stdin with zeros so they all have the same
# length.
#
# Character set: UTF-8
# ©opyleft 2008– Øyvind A. Holm <sunny@sunbase.org>
# License: GNU General Public License version 3 or later, see end of
# file for legal stuff.
#=======================================================================
use strict;
use Getopt::Long;
$| = 1;
our $Debug = 0;
our %Opt = (
'debug' => 0,
'help' => 0,
'verbose' => 0,
'version' => 0,
);
our $progname = $0;
$progname =~ s/^.*\/(.*?)$/$1/;
our $VERSION = "0.00";
Getopt::Long::Configure("bundling");
GetOptions(
"debug" => \$Opt{'debug'},
"help|h" => \$Opt{'help'},
"verbose|v+" => \$Opt{'verbose'},
"version" => \$Opt{'version'},
) || die("$progname: Option error. Use -h for help.\n");
$Opt{'debug'} && ($Debug = 1);
$Opt{'help'} && usage(0);
if ($Opt{'version'}) {
print_version();
exit(0);
}
my @Array = ();
my $max_length = 0;
while (<>) {
my $Line = $_;
push(@Array, $Line);
$Line =~ s/(\d+)/check_max($1)/ge;
}
for my $Curr (@Array) {
$Curr =~ s/(\d+)/pad_number($1)/ge;
print($Curr);
}
sub check_max {
my $Str = shift;
if (length($Str) > $max_length) {
$max_length = length($Str);
}
return("");
} # check_max()
sub pad_number {
my $Num = shift;
return('0' x ($max_length - length($Num)) . $Num);
} # pad_number()
sub print_version {
# Print program version {{{
print("$progname v$VERSION\n");
# }}}
} # print_version()
sub usage {
# Send the help message to stdout {{{
my $Retval = shift;
if ($Opt{'verbose'}) {
print("\n");
print_version();
}
print(<<END);
Usage: $progname [options]
Pads all integers read from stdin with zeros so they all have the same
length. I.e.: 1 5 12 156 1024 = 0001 0005 0012 0156 1024.
Options:
-h, --help
Show this help.
-v, --verbose
Increase level of verbosity. Can be repeated.
--version
Print version information.
--debug
Print debugging messages.
END
exit($Retval);
# }}}
} # usage()
sub msg {
# Print a status message to stderr based on verbosity level {{{
my ($verbose_level, $Txt) = @_;
if ($Opt{'verbose'} >= $verbose_level) {
print(STDERR "$progname: $Txt\n");
}
# }}}
} # msg()
sub D {
# Print a debugging message {{{
$Debug || return;
my @call_info = caller;
chomp(my $Txt = shift);
my $File = $call_info[1];
$File =~ s#\\#/#g;
$File =~ s#^.*/(.*?)$#$1#;
print(STDERR "$File:$call_info[2] $$ $Txt\n");
return("");
# }}}
} # D()
__END__
# Plain Old Documentation (POD) {{{
=pod
=head1 NAME
=head1 SYNOPSIS
[options] [file [files [...]]]
=head1 DESCRIPTION
=head1 OPTIONS
=over 4
=item B<-h>, B<--help>
Print a brief help summary.
=item B<-v>, B<--verbose>
Increase level of verbosity. Can be repeated.
=item B<--version>
Print version information.
=item B<--debug>
Print debugging messages.
=back
=head1 BUGS
=head1 AUTHOR
Made by Øyvind A. Holm S<E<lt>sunny@sunbase.orgE<gt>>.
=head1 COPYRIGHT
Copyleft © Øyvind A. Holm E<lt>sunny@sunbase.orgE<gt>
This is free software; see the file F<COPYING> for legalese stuff.
=head1 LICENCE
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program.
If not, see L<http://www.gnu.org/licenses/>.
=head1 SEE ALSO
=cut
# }}}
# vim: set fenc=UTF-8 ft=perl fdm=marker ts=4 sw=4 sts=4 et fo+=w :
Jump to Line
Something went wrong with that request. Please try again.