Comments below... --- Al Lukaszewski <[EMAIL PROTECTED]> wrote: > Greetings, > > It seems my earlier post ['foreach' and error diagnosis] was not clear > enough for some people on list. I will therefore clarify what I am > trying to do and appeal for further assistance. > > I have a grammatical database in a comma-delimited file. The first > field is the line reference. The second field is the form/word which > is described in the other fields. I need to concatenate these words > into lines that are marked by line reference. The output of the > program should be a single text file with each line clearly marked and > two spaces between each text. > > After heeding some of the help I received earlier, I am receiving > other, but fewer, errors. The code I am running and the error output > is posted below. I do not know what a private array is and do not > what is wrong with my concatenation method. Thanks for any help. > > Al L. > > > > *[OUTPUT]* > > Can't modify private array in concatenation (.) or string at ./chgr.pl line 45, near >""\n\n";" > Execution of ./chgr.pl aborted due to compilation errors. > > > > > *[PROGRAM]* > > #!/usr/bin/perl > # > # Read in the data file > # > > use strict; > use warnings; > #use CSV; > > my $file; > $file = 'qa.db' ; # Name the file > open(INFO, "$file" ) ; # Open the file > my @db; > @db = <INFO> ; # Read it into an array > close(INFO) ; # Close the file > > # Initialize scalars > my $line; # = scalar by which program steps through data > my $fieldRef; # = holding scalar for line reference field > my $fieldForm; # = holding scalar for the lemma field > my $fieldMorph; # = holding scalar for the parsing field > my $fieldSynt; # = holding scalar for the syntax field > my $fieldLex; # = holding scalar for the lexical information field > > my @newQA = ""; # = holding scalar for the output, the contents of >this scalar > will be the compiled texts and will be written to the output file > > my @field; > > my $fieldEval; > my $fieldCtrl = "null"; # Preset control variable to 'zero'
This "presets" $fieldCtrl to the string "null", not zero. > foreach $line (@db) # Assign the contents of @db to $line one line at >time for > evaluation. > { > chomp ($line); > > # @field = split /,/, $line; > ($fieldRef, $fieldForm, $fieldMorph, $fieldSynt, $fieldLex) = split /,/, >$line;#($field[0], > $field[1], $field[2], $field[3], $field[4]); > > $fieldEval = $fieldRef; # Assign current line reference to evaluation scalar > > if ($fieldEval ne $fieldCtrl) # If the evaluation scalar and control scalar >are not equal, do > the following: > { > @newQA .= "\n\n"; # First append two new lines to the output scalar; > @newQA .= $fieldRef; # then, append the new line reference for the fields >to come '@' is a list, '$' is a scalar (single unit of value). If you want to assign a value to a scalar, use $newQA[0]= "\n\n"; If you want, instead, to add these characters to the array list, use push (@newQA, "\n\n"); > $fieldCtrl = $fieldRef; # Assign the new line reference to the control scalar > } > > @newQA= unshift @newQA, " "; > @newQA = unshift @newQA, $fieldForm; Again, you are assigning scalar values to a list. You can't do that. > > } > > my $fileOut; > $fileOut = "qa.txt"; > open @newQA, >> $fileOut; You open *files*, not lists! What in the heck are you trying to do here?! > close @newQA; # Close the file You are closing an array, not a file. Arrays (or lists) do not need to be closed. JW __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]