Caveman
13-03-2006, 10:48
Hallo *,
ich möchte in Perl einen Filehandler als Referenz abspeichern, da ich den in mehreren Funktionen brauche.
So wie hier funktioniert es leider nicht :(
#!/usr/bin/perl -w
use strict;
use warnings;
sub new # Konstruktor
{
my $this = shift;
my $class = ref($this) || $this;
my $path = shift;
my $name = shift;
my $self = {
filehandler => \*DATA,
};
bless $self, $class;
open( $self->{filehandler}, "<$path$name" ) ||
die "Datei " . $name . " kann nicht geoeffnet werden";
return $self;
}
sub getLines # Zeilen einlesen
{
my $self = shift;
my @line;
while ( $self->{filehandler} ) #### funktioniert so nicht ####
{
s/#.+//; # Kommentare entfernen
s/^\s+//; # Leerzeichen am Anfang entfernen
s/\s+$//; # Leerzeichen am Ende entfernen
if ( /^__END__/ )
{ # Ende des Datenbereichs erreicht
last;
}
if ( /^./ )
{ # wenn Zeile nicht leer ist
$line[++$#line] = $_;
}
}
return \@line;
}
sub DESTROY # Destruktor
{
my $self = shift;
close( $self->{filehandler} );
}
my $fileRead = main->new("./", "testfile.txt"); # Konstruktor aufrufen
my $lines = $fileRead->getLines(); # Datei zeilenweise holen
foreach my $line ( %{$lines} )
{
print "$line\n"; # Ausgabe
}
1;
__END__
Wie mache ich es richtig?
Edit:
Auch mit dieser Zeile mag es nicht funktionieren:
while ( "<" . $self->{filehandler} . ">" )
ich möchte in Perl einen Filehandler als Referenz abspeichern, da ich den in mehreren Funktionen brauche.
So wie hier funktioniert es leider nicht :(
#!/usr/bin/perl -w
use strict;
use warnings;
sub new # Konstruktor
{
my $this = shift;
my $class = ref($this) || $this;
my $path = shift;
my $name = shift;
my $self = {
filehandler => \*DATA,
};
bless $self, $class;
open( $self->{filehandler}, "<$path$name" ) ||
die "Datei " . $name . " kann nicht geoeffnet werden";
return $self;
}
sub getLines # Zeilen einlesen
{
my $self = shift;
my @line;
while ( $self->{filehandler} ) #### funktioniert so nicht ####
{
s/#.+//; # Kommentare entfernen
s/^\s+//; # Leerzeichen am Anfang entfernen
s/\s+$//; # Leerzeichen am Ende entfernen
if ( /^__END__/ )
{ # Ende des Datenbereichs erreicht
last;
}
if ( /^./ )
{ # wenn Zeile nicht leer ist
$line[++$#line] = $_;
}
}
return \@line;
}
sub DESTROY # Destruktor
{
my $self = shift;
close( $self->{filehandler} );
}
my $fileRead = main->new("./", "testfile.txt"); # Konstruktor aufrufen
my $lines = $fileRead->getLines(); # Datei zeilenweise holen
foreach my $line ( %{$lines} )
{
print "$line\n"; # Ausgabe
}
1;
__END__
Wie mache ich es richtig?
Edit:
Auch mit dieser Zeile mag es nicht funktionieren:
while ( "<" . $self->{filehandler} . ">" )