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]

Reply via email to