## 21.7. offset: Indent Text

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.