Αν και τα προγράμματα των παραδειγμάτων μας είναι μικρά θα βρείτε πολλές φορές χρήσιμη την κατάτμηση ενός μεγάλου προγράμματος σε μικρότερα. Με τον τρόπο αυτό είναι απλούστερο να διορθωθούν λάθη ή να γίνουν επεκτάσεις, ενώ είναι πολύ ευκολότερο να «ανακυκλώσετε» τον κώδικά σας χρησιμοποιώντας τον σε άλλες εφαρμογές:
Ας δούμε ένα σύντομο παράδειγμα:
#!usr/bin/perl -w
use strict;
print "Grapse 1\n";
my $input;
chomp ($input = <STDIN>);
Το πρόγραμμά μας είναι πολύ απλό. Ζητούμε από τον χρήστη να πληκτρολογήσει τον αριθμό 1.
if ($input eq 1)
{
&subroutine1;
}
Αν ο χρήστης πράγματι πληκτρολογήσει 1, τότε θα εκτελεστεί το περιεχόμενο των {}. Μέσα εκεί όμως δεν υπάρχει κώδικας, αλλά μόνο μια κλήση προς το υποπρόγραμμα subroutine1. Το & δηλώνει στην Perl ότι πρέπει να εκτελέσει ό,τι περιέχει αυτό το υποπρόγραμμα. (Η Perl θα καταλάβει τι πρέπει να κάνει και χωρίς αυτό, αλλά για λόγους σωστής δομής καλό είναι να το χρησιμοποιείτε πάντοτε.)
else
{
&subroutine2;
}
Αν ο χρήστης δεν πληκτρολογήσει 1, τότε θα εκτελεστεί το υποπρόγραμμα που ονομάσαμε subroutine2. Το όνομά κάθε subroutine πρέπει να είναι μικρότερο από 255 χαρακτήρες και να περιέχει μόνο γράμματα, αριθμούς και την underscore. Επίσης είναι case sensitive, δηλαδή το $subroutine1 είναι διαφορετικό από το $Subroutine1
Η Perl γνωρίζει πού να βρει αυτά τα υποπρογράμματα. Συνήθως, τα τοποθετούμε στο τέλος του script μετά από όλες τις άλλες γραμμές κώδικα. Το ίδιο κάναμε και εδώ:
sub subroutine1
{
print "Egrapses 1\n";
}
Το sub εξηγεί στην Perl ότι αναφερόμαστε σε ένα υποπρόγραμμα και ακολουθεί ο τίτλος του, ενώ μέσα στα άγκιστρα υπάρχει το περιεχόμενο αυτής της υπορουτίνας (που εδώ φυσικά είναι πάρα πολύ απλό).
sub subroutine2
{
print "Den egrapses 1\n";
}
Η υπορουτίνα 2.
Η γενική σύνταξη ενός υποπρογράμματος είναι:
sub - όνομα προγράμματος - {εργασίες}
Μια από τις σημαντικότερες εφαρμογές των υποπρογραμμάτων αυτών είναι η χρήση τους ως εξειδικευμένες συναρτήσεις. Αν η Perl δεν διαθέτει συνάρτηση για να κάνει κάτι που εσείς χρειάζεστε συχνά, μπορείτε να δημιουργήσετε τη δική σας υπορουτίνα και να την προσθέτετε σε όλα τα προγράμματά σας.
Sub fahr_to_cel
{
$celsius = ($fahrenheight 32) *5 / 9;
}
Η Perl δεν διαθέτει συνάρτηση για να μετατρέπει τους βαθμούς Fahrenheight σε Κέλσιου. Έτσι εμείς δημιουργήσαμε την παραπάνω subroutine και τη χρησιμοποιούμε σε όποιο πρόγραμμά μας τη χρειάζεται. (Αν φυσικά απαιτείται συχνά από τα προγράμματά μας κάτι τέτοιο.)
Με την τεχνική αυτή «ανακυκλώνουμε» τον κώδικά μας και τον επαναλαμβάνουμε όσες φορές χρειαστεί. Για κώδικα που θα χρησιμοποιηθεί σε ένα μόνο πρόγραμμα η δημιουργία subroutines δεν είναι απαραίτητη. Είναι όμως χρήσιμη γιατί τακτοποιεί τον κώδικά μας και μας είναι ευκολότερο:
- Να τον τροποποιήσουμε αργότερα
- Να ανακαλύψουμε λάθη σε αυτόν.