Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

run a perl script for all files in a folder

by lakssreedhar (Acolyte)
on Aug 06, 2012 at 11:03 UTC ( [id://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 addclause.pl < $f "; system($cmd); }

Replies are listed 'Best First'.
Re: run a perl script for all files in a folder
by Corion (Patriarch) 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 (Vicar) on Aug 06, 2012 at 11:58 UTC
    Hi,

    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 addclause.pl <$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

Re: run a perl script for all files in a folder
by klightsey (Initiate) on Mar 19, 2019 at 16:53 UTC
    I am surprised no one listed this option. No need for a script, folks. perl -p -i -e 's/Municipality/City/g' * (The g is if you want all occurrences on the line to be changed, too, not just the first.)

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (1)
As of 2024-04-23 16:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found