Thread Referenz auf FILEHANDLE oder Global (10 answers)
Opened by Karsten42 at 2018-04-27 11:09

Linuxer
 2018-04-28 01:44
#188315 #188315
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Solange Du nur "einfache" Handles aus oder an Subroutines geben willst, funktioniert das wunderbar bereits mit lexikalischen Variablen. Da braucht es keine Typeglobs (mehr).

Ich habe das schon sehr erfolgreich für einen Parser eingesetzt. Der durfte zeilenweise aus einer Datei mit einer verschachtelten Struktur lesen; je nach Zeile wurden dann die folgenden Unterstrukturen mit eigenen Subroutinen verarbeitet, indem einfach nur das lexikalische Handle an die Subroutine gereicht wurde und diese dann selber aus dem Handle gelesen hat.

Grobes Schema (aus der Erinnerung, ungetestet):
more (4.5kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use strict;
use warnings;

# ...

sub parse_from_handle {
  my ( $handle, ) = @_;

  while ( my $line = <$handle> ) {
    # parse lines here until a end condition strikes
    # ...
    last if $end_condition;
  }

  return # ...
}

# MAIN

my $file = shift @ARGV || die "no file given to read from\n";

open my $fh, '<', $file or die "open($file,ro) failed: $!";

# feed handle to subroutine
parse_from_handle( $fh );


close $fh;



Mehr zu Typeglobs kann man auch da nachlesen: Perldoc:perldata Typeglobs-and-Filehandles
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Referenz auf FILEHANDLE oder Global