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]