Lesenden FH in Unterfunktion verarbeiten?
Stefan Welscher
- perl
Hallo zur spaeten Stunde,
ich hab gerade wieder ein kleines PERL-Problem.
Ich oeffne im Hauptskript eine Datei (lesend) und arbeite diese bis zu einer bestimmten Stelle ab. Ab dieser Stelle soll der Filehandle an eine Unterfunktion übergeben werden und von dieser weiter gelesen werden.
Vorgestellt hab ich mir das ganze so (vereinfacht):
#script.pl:
open (INPUT, "<", $input_file) or die "\n\nDatei konnte nicht geoeffnet werden!\n\n";
while (my $line=<INPUT>)
{
my %I=&read_input($line, $output_dir, $date);
#...Pruefzeugs...
if ($main::multiline)
{ $main::line_input=&read_input_ml(\%I,*INPUT); }
}
#submodule.pm:
package Projects::submodule;
use Exporter;
use Convert;
@ISA = ('Exporter');
@EXPORT = qw( &read_input
&read_input_ml );
sub read_input
{
#...
}
sub read_input_ml
{
my ($HI, $INPUT)=@_;
my %I=%{$HI};
while (my $line=<$INPUT>)
{
($variable1,
$variable2,
$variable3
) = split (/\t/,$line);
print "\nSublineID = ".$variable1."\n";
if ($variable1 ne $I{'variable1'})
{ return $line; last; }
}
return 0;
}
Funktioniert aber in der Praxis nicht:
Can't modify constant item in list assignment at ../lib/Projects/submodule.pm line 525, near ");
Line 525 entspricht der split-Anweisung.
Was läuft da schief und wie mache ich es richtig?
Danke und Gruß,
Stefan
Can't modify constant item in list assignment at ../lib/Projects/submodule.pm line 525, near ");
Line 525 entspricht der split-Anweisung.
Nein, das kann m.E. nicht stimmen, denn in der split-Anweisung taucht nirgendwo ") auf. Ansonsten schau bitte nach, ob Du nicht vielleicht irgendwo ein Sigil vergessen hast (eigentlich die häufigste Ursache für den Fehler).
Siechfred
Hallo!
ungetestet:
if ($main::multiline)
{ $main::line_input=&read_input_ml(%I,*INPUT); }
}
Übergib hier mal nicht *INPUT selbst, sondern nur seine Referenz, (\*INPUT). Dann sollte es funktionieren.
Grüße, Skrilax