Thread Perlskript (8 answers)
Opened by Gast at 2006-05-09 22:39

bloonix
 2006-05-10 13:29
#7555 #7555
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Katya,09.05.2006, 20:39]Ich freue mich um die Antworten und bitte um möglichst dettalierte Erklärungen[/quote]
Erklärungen gab es ja schon genug... ich hätte da ein paar
Dinge zur Syntax auf dem Herzen... :)

Code: (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl
use strict;
use warnings;

# In @ARGV stehen standardmaessig alle Argumente, die ueber die
# Kommandozeile mitgegeben wurden. Hier wird das @ARGV Array
# mittels der for-Schleife durchlaufen. Jedes Element wird
# im Angeloperator $_ abgelegt. Uebersetzt koennte man es so
# beschreiben:
#    schreibe den Rueckgabewert von process($_) fuer jedes Element von @ARGV
print process($_), "\n" for @ARGV;

sub process {
  # mit shift wird das Array @_ um den ersten Wert gekürzt und
  # dieser Wert wird in $file gespeichert.
  # In @_ sind die Argumente abgelegt, die der Funktion mitgegeben
  # werden. @_ kann man mit @ARGV vergleichen.
  my $file = shift;
  my ($n,$avg);

  # ich habe deine runden Klammern etc. einfach mal weggelassen,
  # weil es mein Schreibstil ist und es mir optisch besser gefaellt :-)
  # wenn ein Skript mit "or die" beendet wird, dann vergiss
  # $! nicht, denn darin steht, weshabl "open" eventuell fehlschlägt
  open FILE,'<',$file or die $!;

  # Filehandles sollten immer mit einer while-Schleife durchlaufen
  # werden. Das hat wohl was mit dem Erkennen von eof (End-of-File)
  # zu tun...
  while (my $line = <FILE>) {
     chomp($line);

     # ein 'next' ist in diesem Fall optimal, damit sofort die
     # naechste Zeile bearbeitet werden kann und die Schleife
     # nicht erst noch nach Anweisungen nach deinem if sucht
     next unless $line =~ /(\w+)$/;
     my $len = length($1);
     $avg += $len;
     $n++;
  }
  close FILE;
  # arithmetisches Mittel + Rueckgabe des Wertes
  return $avg / $n;
}
\n\n

<!--EDIT|opi|1147262454-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Perlskript