Perl bietet eine Menge vordefinierter Funktionen: siehe perl.com/pub/q/functionlist- Liste aller verfügbaren Funktionen:
-X abs accept alarm atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir | connect continue cos crypt dbmclose dbmopen defined delete die do dump each endgrent endhostent endnetent endprotoent endpwent | endservent eof eval exec exists exit exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam | gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid | getservbyname getservbyport getservent getsockname getsockopt glob gmtime goto grep hex import int ioctl join keys kill last | lc lcfirst length link listen local localtime log lstat m// map mkdir msgctl msgget msgrcv msgsnd my | next no oct open opendir ord pack package pipe pop pos printf prototype push | q/STRING/ qq/STRING/ quotemeta qw/STRING/ qx/STRING/ rand read readdir readlink recv redo ref rename require reset return reverse | rewinddir rindex rmdir s/// scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority | setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split | sprintf sqrt srand stat study sub substr symlink syscall sysread system syswrite tell telldir tie time times | tr/// truncate uc ucfirst umask undef unlink unpack unshift untie use utime values vec wait waitpid wantarray | warn write y/// |
Subroutinen sind praktisch, um Scripts besser strukturieren zu können bzw. um nicht mehrmals die gleichen Blöcke schreiben zu müssen, falls innerhalb eines Scripts die gleiche Prozedur mehrmals durchgeführt wird. Sie werden mit
sub gewaehlter_name { anweisungen; }definiert und mit &gewaehlter_name; eingebunden.
Beispiele: die meisten meiner perl-scripts enthalten sub-routinen (momentan v.a. Fehler-routinen am Schluss).
Hinweis:
Im Ggs. zu vielen anderen Sprachen behält eine Variable ihren ihr in einer Subroutine ('Unterprogramm'/ function-a-like) zugewiesenen Wert, d.h. es dürfen eigentlich keine zwei gleichnamigen Variablen im gleichen Perl-Script definiert werden. Dem kann man sich behelfen durch Voranstellen von my: (das Beispiel gibt "hafergrütze" aus, ohne my 35.)
#!/usr/bin/perl $x = "hafergrütze"; &rechne(5*7); print $x, "\n"; sub rechne {my $x = eval($_[0]);}
Mehrere Parameter durch Kommas trennen. Der zweite Parameter würde dann mit $_[1] angesprochen werden usw. . Bei einem Parameter kann dieser auch mit @_ (= Array der Parameter, die übergeben werden) angesprochen werden!
#!/usr/bin/perl $x = &Rechne(1+2*8*9); print $x, "\n"; sub Rechne { return eval($_[0]); } #oder sub Rechne { return eval(@_); }