#!/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 = ) {      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; }