in reply to copy files

These lines are the problem:

my @directory = join "\\", @path[0,5,6]; my $srcfile; my $dir = @directory;
You're assigning a path to an array, which will put it in the first array element. You're then assigning that array to $dir in scalar context, which is assigning the size of the array (1) to $dir.

The use of an array for @directory doesn't quite make sense to me here unless you later intend to process a list of directories, which I don't see code for.

Replies are listed 'Best First'.
Re: Re: copy files
by skyler (Beadle) on Feb 24, 2003 at 20:49 UTC
    Steves I hope you are there! I complety understand what are you saying? I have added shift to @directory but it only copies one file???? so you are right!! how could I recode this script so it looks at every directory contain within the array. Any suggestions??? I'll appreciate your help.
    #! perl -w use strict; use File::Find; use File::Copy; my $infile = 'c:/doclist1.chr'; # my $outfile = 'c:/doclist1.txt'; open IN, "<$infile" or die "Couldn't open $infile, $!"; # open OUT, ">$outfile" or die "Couldn't open $outfile, $!"; while(<IN>) { chomp; my @fields = split /,/; my $path_str = $fields[6]; do { warn "Empty field 7"; next } unless $path_str; my @path = split /\\/, $path_str; # assuming you want to remove a few directories my @directory = join "\\", @path[0,5,6]; my $srcfile; my $dir = shift @directory; sub process_file { if ($File::Find::dir ne $dir) { $File::Find::prune = 1; return 0; } return 0 if ($_ !~ /\.rtf$/); copy($File::Find::name, "C:\\testfiles\\$_") or die "Failed to cop +y $_: $!\n"; return 1; } find(\&process_file, $dir); # print OUT "\n@directory"; } exit;