Dermot Paikkos wrote: > > Hi gurus, Hello,
> I have a script that is causing me some trouble. I haven't pasted the whole script > here > as it is a bit long and I can't submit any test data. > > Basically the script copies and renames file. At the end I would like to print out a > report of all the files it has renamed. These reports are used by another process > later > and the reports have to be unique to each user. > > At the start I glob a directory for tif files and these are added to the @tiffs > array. Later > a subroutine loops through the array and prints the file names into the user's log. > However I only get the first file name from the file glob, all the others seem > disappear. I have printed debug messages about the size of the array but it always > has a length of 1 by the time it is in the sub routine. > > Should I be using a array reference instead? It so can anyone explain how to use it? > My initial attempts at using references has not been v. successful. > > Thanx in advance. > Dp. > > ...snip > ...snip > while (defined(my $i = <$inpath/*.tif>)) { > chomp($i); You don't need to chomp, there is no newline there. > my $n = lc($i); > my $name = basename($n); > print "added $name to array\n"; > push(@tiffs,$name); > my $bar = @tiffs; > ++$in; > print "Array is now $bar big\n"; > ... > ... > .. > } You can simplify that a bit: my @tiffs = map lc basename( $_ ), <$inpath/*.tif>; print 'Array is now ' . @tiffs . " big\n"; Or: opendir my $dh, $inpath or die "Cannot open $inpath: $!"; my @tiffs = map lc, grep /\.tif$/, readdir $dh; closedir $dh; print 'Array is now ' . @tiffs . " big\n"; > # Create log > scanlog($log_path,@tiffs); > > sub scanlog { > > my $log_path = shift; > my (@tiffs) = shift; shift() returns the first element of an array so you are only getting one file name in @tiffs. Also an array forces a list context on the assignment so the parenthesis are not required. my @tiffs = @_; > my $jpg; You should declare this in the scope (foreach loop) where it is used. > print "\n$log_path\n"; > > my $user_file = new Logfile::Rotate( > File => "$log_path", ^ ^ You don't have to quote variables. File => $log_path, > Count => 20, > Gzip => "no", > ); > > $user_file->rotate(); > > print "opening $log_path\n"; > open(SCAN,">$log_path") || die "Can't open $log_path: $!\n"; > > my $bar = @tiffs; > print "Starting loop with [EMAIL PROTECTED] = $tiffs[0] next is $tiffs[1]\n"; > # $tiffs[1] prints undef > > print "Array is $bar size\n"; > > foreach $jpg (@tiffs) { ^^^^ Declare the $jpg variable here. foreach my $jpg ( @tiffs ) { > # Put a carriage return in for MS WIN readers. > my $grr = "$jpg"."\015"; > print "$jpg\n"; perl should print the correct characters for "\n" on Windows, you shouldn't have to print "\015" yourself. > print SCAN "$grr\n"; > } > > close(SCAN); > > } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]