Do you have a printer that starts each line too close to the left margin? You might want to indent text to make it look better on the screen or a printed page. Here's a Perl script that does that. It reads from files or standard input and writes to standard output. The default indentation is 5 spaces. For example, to send a copy of a file named graph to the lp printer, indented 12 spaces:
% offset -12 graph | lp
Here's the Perl script that does the job:
Go to http://examples.oreilly.com/upt3 for more information on: offset
#!/usr/local/bin/perl if ($ARGV[0] =~ /-[0-9]+/) { ($indent = $ARGV[0]) =~ s/-//; shift @ARGV; } else { $indent = 5; } while (<>) { print " " x $indent, $_; }
If there's an indentation amount in the first command-line argument, the dash is stripped and the value stored, then that argument is shifted away. Then a loop steps through the remaining arguments, if any (otherwise standard input is read) and outputs their text preceded by spaces. The script uses the Perl operator "string" x n, which outputs the string (in this case, a single space) n times. The Perl $_ operator contains the current input line.
-- JP
Copyright © 2003 O'Reilly & Associates. All rights reserved.