PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Datei Handle einer funktion übergeben



mr-sansibar
16-06-2006, 09:26
Hallo Ich möchte einer Funktion ein Datei Handle übergeben.
bekomme aber eine Fehlermeldung:

Bareword "OUT" not allowed while "strict subs" in use at C:\trxLogParser_2006
Execution of C:\trxLogParser_2006-06-14.pl aborted due to compilation errors.


my $write_file = "c:/trxlogfile.txt";
open(OUT, ">$write_file" ) || die "Kann die Datei nicht erzeugen: $!";

foreach (@ARGV) {
@array_result=work_with_file($_, OUT);
}

close(OUT);

michael.sprick
17-06-2006, 00:10
Filehandles in Perl sind nicht ganz das, was die meisten glauben...
Wenn wir folgenden Code haben:

open(MYFILE,"file.txt"); Dann ist MYFILE eigentlich nur eine smybolische Referenz auf ein Typeglob, welches seinerseits erst das echte Filehandle beinhaltet. MYFILE ist in Wirklichkeit also ein Barewood, welches durch 'use strict' verboten wird. Das Pragma 'strict' lässt aber ein paar wenige Ausnahmen zu...



use strict;

print MYFILE "Dies ist ein Text\n"; #funktioniert
close(MYFILE); #funktioniert auch
$FH = MYFILE; #funktioniert NICHT!


Der nächste Punkt ist, dass ein Filehandle eine andere Datenstruktur hat als ein Skalar - auch wenn beides nur einfache Werte sind. Um nun ein Filehandle weiterzureichen oder zu speichern, müssen wir also eine Referenz benutzen. Diese Referenzen wiederum können von allen Filehandle Operationen in Perl verarbeitet werden. und wenn Du das alles garnicht wissen wolltest, mach einfach:



#!/usr/bin/perl
use strict;
use warnings;

sub work_with_file($)
{
my $FileHandle = shift(@_);
my $Line = 0;
while(<$FileHandle>)
{
printf("%6d: %s", ++$Line, $_ );
}
}

open(MYFILE,">test.txt");
work_with_file(*MYFILE);
close(MYFILE);


hth, Michael

mr-sansibar
21-06-2006, 14:55
danke, hat geklappt

ThorstenS
25-06-2006, 18:24
Super beschrieben Michael!

Aber ein winzig kleiner aber entscheidener Fehler hat sich eingeschlichen:

open(MYFILE,">test.txt");
Sollte eher

open(MYFILE,"<test.txt");
heißen, sonst löschst du ja die Datei und gibst sie nicht aus.