Stefan Welscher: Lesenden FH in Unterfunktion verarbeiten?

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

  1. 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

    --
    Coping With Scoping (Deutsche Übersetzung)
    Als Moderator habe ich keinerlei Humor, von dem ich wüsste.
  2. 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

    --
    Democracy is a device which ensures that we shall be governed no better than we deserve.
    (G. B. Shaw)