Leser: 23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my $dir = 'd:\old_log';
my @all_files = get_all_files($dir);
foreach my $file (@all_files) {
print $file."\n";
open my $FH, "<", "$dir\\".$file or die $!;
my @zeilen = <$FH>;
foreach my $line(@zeilen){
# Hier müsste ich die Zeichen formatieren
}
close($FH);
}
sub get_all_files {
my $dir = shift;
my $FH = undef;
opendir $FH, $dir;
my @all_files = grep{$_ =~ '.txt'} readdir($FH);
closedir($FH);
return @all_files;
}
1 2 3 4 5 6 7
my %replace = ( m => "MPZ", a => "APZ", ... ); my $re = join '|', keys %replace; $string =~ s/\b($re)\b/$replace{$1}/g;
1 2 3 4 5 6 7 8 9 10
open my $FHOUT, ">datei"; %zuordn=("m","MPZ","a","APZ","b","BPZ",5,"XXX",7,"ABC","c","DEF"); while (<$FH>){ @line=split; for $i (0 .. 3){ $line[$i]=$zuordn{$line[$i]}; } $outline=join " ",@line; print $FHOUT "$outline\n"; }
2010-06-23T13:31:42 Sven_1231. Das ist ja kein komplettes Script, das deklarieren mach ich lieber anfangs irgendwo gebündelt
Quote2. In einem kleinen Script seh ich doch schnell, ob's läuft, oder nicht. In welchen Situationen kann es überhaupt passieren, dass ich eine Datei nicht öffnen kann?
Quote4. Das hatte ich schonmal wo gelesen - warum?
Quote5. Eben aus dem Grund "Finger wundtippen" hab ich das einfach in die Klammern gesetzt - oder gibt's da nen Trick für die Pfeilschreibweise?
2010-06-23T14:46:56 Sven_123Zur Position der Deklaration muss ich aber sagen, dass ich es viel übersichtlicher find, die gleich am Anfand des Hauptprogramms, oder der Subroutinen/Blöcke zu tätigen, von irgendwelchen Schleifenvariablen mal abgesehn. Die einzigen im Wiki aufgeführten Gründe, die dagegen sprechen sind "schlechter Stil" und "fehlerträchtig", wobei ersteres ziemlich nichtsaussagend und zweites (für mich) auch nicht wirklich nachvollziehbar ist. Eine deklarierte, aber nicht gefüllte Variable wird wohl kaum massig Speicher benötigen, oder?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
my %big_hash; my %big_array; ... if ($x) { # fülle %big_hash und %big_array und mache was damit ... } if ($y) { # mach was ganz anderes } # usw usf # %big_hash und @big_array verbrauchen bis zum scriptende platz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
... if ($x) { my %big_hash; my %big_array; # fülle %big_hash und %big_array und mache was damit ... } # hier sind %big_hash und @big_array schon nicht mehr vorhanden, # speicher wird wieder ans script zurückgegeben zur wiederverwendung # und das ganz automatisch if ($y) { # mach was ganz anderes } # usw usf
QuoteIch glaube, ich würde viel mehr Fehler machen, wenn ich alle Variablen erst beim ersten Auftauchen deklariere, weil mir das wohl andauernd in irgendwelchen Schleifen passieren würde, obwohl ich sie draußen noch brauch.
QuoteZudem verlöre ich bei nem längeren Programm wohl auch den Überblick über benutzte Variablen
1 2 3 4 5 6 7 8 9 10 11
sub foo { for my $i (0 .. 23) { ... } } ... sub bar { for my $i (23 .. 42) { } }
Quote2. Ok...die Scripte die ich zur Zeit schreib benutz ich meistens nur in dem Ordner in dem ich mich grad befind und normalerweise öffne ich da grad auch eine Datei zum Lesen und eine zum Schreiben, oder so...ich glaub nicht, dass es da nötig ist, aber wenn es weniger überschaubar wird, hast du wohl recht.
Quote4. Warum man die 3-Argumente-Form nehmen soll.
Weder im Tutorial im Wiki, noch in meiner Ausgabe der "Einführung in Perl" ist das überhaupt erwähnt und in der perldoc ist die Syntax zwar mit $file, aber nicht begründet warum...
Quote5. Dafür schreibt man =>, Leertasten und Returns. Es ist aufjedenfall mehr zu tippen als die Klammerschreibweise, deswegen hatte ich mich über dein Finger wund tippen gewundert und dachte du benutzt vielleicht irgendwelche Makros, wobei das natürlich eh editorabhängig wär. Ist egal...übersichtlicher ist es, geb ich zu. Aber irgendwie häßlich...*g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
my ($x,$y); $y=5; $x=&blubb; sub blubb{ my $z; $z=3; $z += $y; $z; } # und my $y=5; my $x=&blubb; sub blubb{ my $z=3; $z += $y; $z; }
1 2 3 4 5 6 7 8 9 10
open (INP, "< datei") or die "keine datei"; mach was; close INP; # oder { open (my $inp, "< datei") or die "keine datei"; mach was; }
1 2 3 4 5
#!/usr/bin/perl chomp ($_ = <STDIN>); @x = split; foreach $x (@x){$x{$x} += 1} foreach $x (sort keys %x){print "$x: $x{$x}\n"}