It's six of one and a half dozen of the other, I suppose, but I would prefer to dispense with the unwanted first line another way.
$ ls -l
total 4
-rw-r--r-- 1 root root 0 May 22 21:09 accts
drwxr-xr-x 2 root root 512 May 22 21:10 dir1
-rw-r--r-- 1 root root 0 May 22 21:09 file1
-rw-r--r-- 1 root root 0 May 22 21:09 file1.log
-rw-r--r-- 1 root root 0 May 22 21:09 file13
-rw-r--r-- 1 root root 0 May 22 21:09 fred
drwxr-xr-x 2 root root 512 May 22 21:10 staff
$ perl -Mstrict -Mwarnings -e '
> open my $lsFH, q{-|}, q{ls -l}
> or die $!;
> scalar <$lsFH>;
> print
> map { qq{@{ [ (split)[8] ] }\n} }
> grep { m{^[^d]} && ! m{file1} }
> <$lsFH>;'
accts
fred
$
Using a filehandle and a scalar read gets rid of the first line before the loop and avoids the extra test each time in the grep. Cheers, JohnGG |