[comp.sources.d] grep for perl in half the size

bob@dhw68k.cts.com (Bob Best) (08/07/88)

Sorry for the additional posting, but I woke up this morning with an
idea to reduce the program size in half.
--------------cut here----------------
# grep.pl - perl version of grep(1)
# written by bob best (bob@dhw68k.cts.com)
# Revision 1: used $if_unless to reduce program size in half

while ($_ = $ARGV[0], /^-/) {
	shift;
	/^-y/ && ($fold='i') && next;
	/^-v/ && ($nonmatch=1) && next;
	/^-c/ && ($count=1) && next;
	/^-n/ && ($line=1) && next;
	/^-l/ && ($fileonly=1) && next;
}
$pattern=$ARGV[0]; shift;
++$multifile if $#ARGV > 0;
$nonmatch ? ($if_unless = 'unless') : ($if_unless = 'if');

dogrep: {

if ($fileonly) {
	eval "while (<>) { $if_unless (/$pattern/$fold) {
		print \"\$ARGV\\n\"; close(ARGV);} } ";		
	last dogrep;
}

if ($count && $multifile) {
	eval "while (<>) { ++\$cnt $if_unless /$pattern/$fold;
		if (eof) { print \"\$ARGV:\$cnt\\n\"; \$cnt=0;} } ";
	last dogrep;
}

if ($count) {
	eval "while (<>) { ++\$cnt $if_unless /$pattern/$fold;} print \"\$cnt\\n\"; ";
	last dogrep;
}

if ($multifile && $line) {
	eval "while (<>) { print \"\$ARGV:\$.:\$_\" $if_unless /$pattern/$fold;
		close(ARGV) if eof; } ";
	last dogrep;
}

if ($multifile) {
	eval "while (<>) { print \"\$ARGV:\$_\" $if_unless /$pattern/$fold; } ";
	last dogrep;
}

if ($line) {
	eval "while (<>) { print \"\$.:\$_\" $if_unless /$pattern/$fold;} ";
	last dogrep;
}

eval "while (<>) { print $if_unless /$pattern/$fold; } ";

} #end of dogrep block
-- 
Bob Best
uucp: ...{trwrb,hplabs}!felix!dhw68k!bob	InterNet: bob@dhw68k.cts.com