Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

run a perl script for all files in a folder

by lakssreedhar (Acolyte)
on Aug 06, 2012 at 11:03 UTC ( #985666=perlquestion: print w/ replies, xml ) Need Help??
lakssreedhar has asked for the wisdom of the Perl Monks concerning the following question:

i have a perl program written for a file in a folder.i want to run this for all files in that folder. the code i have written doesnt seem to work

#!/usr/bin/perl @files = glob("$ARGV[0]/*"); foreach $f (@files) { $cmd="perl < $f "; system($cmd); }

Comment on run a perl script for all files in a folder
Download Code
Replies are listed 'Best First'.
Re: run a perl script for all files in a folder
by Corion (Pope) on Aug 06, 2012 at 11:04 UTC

    The most likely reason is that $ARGV[0] contains whitespace, but you haven't told us so.

    If that really is the case, I recommend using File::Glob::bsd_glob which has far saner semantics than glob.

Re: run a perl script for all files in a folder
by 2teez (Priest) on Aug 06, 2012 at 11:58 UTC

    Or you could either use opendir function to open up the folder in question and then, get each of the file with readdir function to "work" on like so:

    use warnings; use strict; opendir my $dh, $ARGV[0] or die "can't open directory: $!"; while ( readdir $dh ) { chomp; next if $_ eq '.' or $_ eq '..'; #..... get each file to work on .... } closedir $dh or die "can't close directory: $!"; ### or use File::Find like so: use File::Find qw(find); find( sub { print $_, $/ }, $ARGV[0] );
    The Anonymous subroutine, could be used to do what you want on each of the file in the folder.
    Please check the following for more info:
    • perldoc -f opendir
    • perldoc -f readdir
    • perldoc File::Find

    Hope this helps.

Re: run a perl script for all files in a folder
by aaron_baugher (Curate) on Aug 06, 2012 at 13:01 UTC

    Wrapping one perl script in another perl script just to loop through files tends to look like overkill to me. Just use the shell:

    $ for i in folder/* ; do perl <$i; done

    Aaron B.
    Available for small or large Perl jobs; see my home node.

      2 Aaron.I tried the shell but it produces an error like cannot open the file

        Thanks Aaron,your shell script worked

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://985666]
Approved by Corion
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2016-05-31 03:36 GMT
Find Nodes?
    Voting Booth?