gorpong@ping.chi.il.us (Gordon C. Galligher) (02/22/91)
HARDWARE: 80386 O/S: SCO "UNIX" System V.3.2 PERL: 3.0 PL41 I found that I needed a Berkeley-like fold command, and decided to attempt it in Perl (so I could try some good stuff with 'format' and 'eval' (I never used 'eval' before and thought it was about d*mn time.)) :-) I am sure some of you already know the problem I have experienced: format appears to not honor whitespace such as tabs. All the tabs get truncated to a single space. Is there something to tell format not to do this? Also, with the code below (I will have ^L there so you do not have to read it if you do not wish to) is there a way to get format to preserve any blank lines which show up? (The manual page states something about @*, but I need the ^ picture field to get the special magic.) I could always kludge it and write my own \n and then decrement $- (I think that is the one) but that is a mess. Any help any of you can give me would be greatly appreciated. This issue may have been beaten to death in the past few weeks during which I have not had the opportunity to read news, and if so, I am sorry. (But I sure would like an e-mail reply! :-) Thank you. -- Gordon. -- Gordon C. Galligher 9127 Potter Rd. #2E Des Plaines, IL 60016-4881 gorpong@ping.chi.il.us gorpong%ping@uu.psi.com ...!uu.psi.com!ping!gorpong "I know how it works....That's why I don't like it" -- Chip Salzenberg on SCO "UNIX" C2 Security Package =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=snip-snip=snip-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= : ############################################################################### ## ## ## ident: @(#)fold 1.0 PERL 3.0 2/21/91 ## ## ## ############################################################################### ## ## Modification History: ## ## Opus 1.0 ## 02/21/91 - Gordon C. Galligher (gorpong@ping.chi.il.us) ## This is a simple little hack which does what the ## Berkeley 'fold' command does (forces lines to fit ## a certain length). Right now it accepts two ## arguments, -w_width_, and -f. The -w_width_ is ## rather obvious, and if the -f is on the command ## line (before any file names) then a form-feed is ## injected between files. These are not the same ## as the Berkeley program, but as I said, this is a ## hack. ## ############################################################################### ## ## System V.3 does not have a kernel which recognizes '#!' format, so I need ## to have this so perl will be executed. ## eval "exec /usr/local/bin/perl -S $0 $*" if $running_under_some_shell; ## ## Any variables which have default values. ## ($argv0 = $0) =~ s!.*/!!; # Get the basename $DEFWIDTH = 80; # Default width to break line $FORMFEED = "\f"; # The formfeed character $usage = "usage: $argv0 [-w_width_] [-f] [file ...]"; # Obvious ## ## Variables which can be changed via the command line ## $width = $DEFWIDTH; # The width to break the line $form = ""; # Default to no form-feed. $evexp = "format =\n"; # The start of the eval expr. ## ## Parse command line arguments ## while ($_ = $ARGV[0], m/^-/) { shift(@ARGV); if ( /^-w\d+/ ) { ($width = $_) =~ s/-w(.*)/$1/; } elsif ( /^-w/ ) { $width = shift(@ARGV); } elsif ( /^-f$/ ) { $form = $FORMFEED; } else { die "$usage\n"; } } # WHILE $_ = ... ## ## Now to the good stuff. The '^' is followed by 'x' ($width-1) '<' ## characters (I LOVE the x operator!) to force the line to be so long, ## and this is followed by two tilde's so the system will automatically ## exhaust $_ before continuing. Then end the format declaration with ## the period alone on the line. The next thing executes 'eval' to evaluate ## that nice little format I just built on the fly. ## $evexp .= '^' . "<" x ($width - 1) . "~~\n\$_\n.\n"; eval "$evexp"; while (<>) # Read all of the files { chop if length > 0; # Remove \n if not blank line write; # Do the format magic print "$form" if eof && !eof(); # Print \f between files, NOT } # WHILE <> # after the last file. -- Gordon C. Galligher 9127 Potter Rd. #2E Des Plaines, IL 60016-4881 gorpong@ping.chi.il.us gorpong%ping@uu.psi.com ...!uu.psi.com!ping!gorpong "I know how it works....That's why I don't like it" -- Chip Salzenberg on SCO "UNIX" C2 Security Package