in reply to Re: Problem reading files from directory
in thread Problem reading files from directory

Right, sorry.
opendir(DIR, $INDIR) @mp3files = <*.mp3>; $OUTDIR = "./NEWDIR"; foreach my $FILE (@mp3files) { my $tmp= system("wine ......."); move($INFILE,"$OUTDIR/$INFILE"); if ($tmp!=0) { last; } } foreach my $FILE (@mp3files) { printf "File: %s\n",$FILE; } closedir(DIR);
Now, when i press ctrl+c when wine is running, it jumps out of the 1st foreach. But at least one of the files has already been moved. When printing in the second foreach, it prints ALL files that were there, even the one that's been moved.

Replies are listed 'Best First'.
Re^3: Problem reading files from directory
by shigetsu (Hermit) on Jul 20, 2007 at 19:38 UTC

    First of, you should probably be using strictures (place them after the shebang line (usually #!/usr/bin/perl) separated by a blank line):

    use strict; use warnings;

    foreach will just iterate over a list given. Since you don't modifiy @mp3files anywhere, the contents will remain the same (i.e. untouched) in your second iteration.

      Not sure what you're doing in system(2) (the wine call), but why not try the following?

      @mp3files = <$INDIR/*.mp3>; $OUTDIR = "./NEWDIR"; foreach my $FILE (@mp3files) { my $tmp= system("wine ......."); move($INFILE,"$OUTDIR/$INFILE"); if ($tmp!=0) { last; } } @mp3files = <$OUTDIR/*.mp3>; foreach my $FILE (@mp3files) { printf "File: %s\n",$FILE; }

      Also, there's no such thing as the "move" subroutine. Is it just designed like:

      sub move { system "mv $_[0] $_[1]"; # $_[1] = directory + "/" + $_[0] specifi +ed file }

      If so you can simply that by just specifying the directory for the second argument.

      EDIT: Sorry, I got it, I just have to do a @mp3files = <*.mp3>; after the 1st iteration. Sorry about the newbness.