Front page | perl.beginners |
Postings from December 2002
until/if and private array errors
Thread Next
From:
Al Lukaszewski
Date:
December 21, 2002 07:29
Subject:
until/if and private array errors
Message ID:
20021220205326.B12639@localhost.localdomain
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'
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
$fieldCtrl = $fieldRef; # Assign the new line reference to the control scalar
}
@newQA= unshift @newQA, " ";
@newQA = unshift @newQA, $fieldForm;
}
my $fileOut;
$fileOut = "qa.txt";
open @newQA, >> $fileOut;
close @newQA; # Close the file
Thread Next
-
until/if and private array errors
by Al Lukaszewski