in reply to Shell Commands executed in perl script

Why use awk inside Perl?
my $i=0; print map { (split)[8]; } grep { ! /^d/ && ! /file1/ && $i++ } `ls -l ./logs/`;
BTW, my ls -l output does not have 9 fields (only for symlinks, where the ninth field is "->"). I guess you can get rid of the shell call altogether if you use stat() and glob() (or readdir() or IO::Dir).

Replies are listed 'Best First'.
Re^2: Shell Commands executed in perl script
by johngg (Canon) on May 22, 2007 at 20:17 UTC
    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