On Friday 16 November 2007 13:28, AndrewMcHorney wrote: > Hello Hello,
> I am getting a strange error Why do you think it is strange? Have you read the documentation for the split function and do you understand it? perldoc -f split > where I am trying to split a string into > an array. The string is a line obtained from doing a directory of a > disk. The error message is: > > Reference to nonexistent group in regex; marked by <-- HERE in m/ > Directory of C > > :\Documents and Settings\Andrew\Application > > Data\ActiveState\KomodoIDE\4 <-- HER > E .1/ at D:\Perl Scripts\remove_duplicate_files.pl line 56. In a regular expression pattern \1, \2, \3, \4, etc. refer back to capturing parentheses in the pattern, respectively the first group, the second group, the third group, the fourth group, etc. If you want to match a literal '\' character in a regular expression you have to escape it. perldoc -f quotemeta > The line in where it happens is the line of code with the split. When developing your code you should include the warnings and strict pragmas to let perl help you find mistakes. use warnings; use strict; > # > # Find all the files > # > @file_list = `dir c: /S`; Have you thought of using a module like File::Find to do this instead? > # > # Build the list of directories and files > # > $temp_index = 0; > > $file_index = 0; > > $directory_index = 0; > > $dir_list_size = scalar(@file_list); > > print $dir_list_size; > print "\n:"; > > while ($temp_index < $dir_list_size) > { > chomp @file_list[$temp_index]; chomp $file_list[$temp_index]; > print @file_list[$temp_index]; print $file_list[$temp_index]; > print "\n"; > > if (@file_list[$temp_index] ne "") if ($file_list[$temp_index] ne "") > { > # > # > @parse_line = split(@file_list[$temp_index]); perldoc -f split split /PATTERN/,EXPR,LIMIT split /PATTERN/,EXPR split /PATTERN/ split Splits a string into a list of strings and returns that list. By default, empty leading fields are preserved, and empty trailing ones are deleted. The first argument to split() is a regular expression pattern. If you do not supply a regular expression pattern then split will convert whatever you *did* supply *to* a regular expression pattern. So the line above: @parse_line = split(@file_list[$temp_index]); is seen by perl as: @parse_line = split( /$file_list[$temp_index]/, $_ ); > # $line_size = scalar(@parse_line); > $line_size = 0; > > if ($line_size > 0) > { > #print @parse_line[0]; #print $parse_line[0]; > #print "\n"; > > # > # Determine if this is a directory and if so add it to the > # directory array and increment the index > # > if (@parse_line[1] eq "Directory") if ($parse_line[1] eq "Directory") > { > #$directory_list = @parse_line[1]; #$directory_list = $parse_line[1]; > #$directory_index =$directory_index + 1; > #print "is a Directory\n"; > } > else > { > ##$actual_files[file_index] = @parse_line[0]; ##$actual_files[file_index] = $parse_line[0]; > # $file_size[file_index] = @parse_line[4]; # $file_size[file_index] = $parse_line[4]; > #$file_deleted[file_index] = 0; > > #$file_index = $file_index + 1; > #print "not a directory \n"; > } > } > } > > $temp_index = $temp_index + 1; > } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/