[eeei.gr Logo]
Επικοινωνία
Ταυτότητα
Μαθήματα Internet | Μαθήματα Προγραμματισμού | Net Business | Τα νέα του Internet | Ο Κόσμος του Αύριο

Scalar variables

Θα δημιουργήσουμε ένα πιο περίπλοκο πρόγραμμα το οποίο λαμβάνει τιμές από διάφορες μεταβλητές (variables) και τις διαχειρίζεται. Η πιο απλή μορφή μεταβλητής στην Perl είναι οι Scalar variables οι οποίες μπορούν να περιέχουν οποιαδήποτε τιμή (αριθμός, κείμενο κ.λπ.), αλλά μόνο μία.

Στο παράδειγμα που ακολουθεί θα δημιουργήσουμε ένα πρόγραμμα το οποίο λαμβάνει μια τιμή σε Fahrenheit και την μετατρέπει σε βαθμούς Κελσίου (Centigrade). Για να γίνει αυτό πρέπει να γνωρίζουμε ότι για να μετατραπεί μια θερμοκρασία από Fahrenheit σε Κελσίου παίρνουμε την τιμή Fahrenheit αφαιρούμε 32 πολλαπλασιάζουμε με το 5 και διαιρούμε με το 9. Ο τύπος είναι:

C = (F-32)*5/9

Όπως γνωρίζουμε και από τα μαθηματικά, τα C και F είναι μεταβλητές και μπορούν να πάρουν οποιαδήποτε τιμή. Για τις ανάγκες του προγράμματός μας τα C και F θα ονομαστούν $cen και $fah αντίστοιχα. Προσέξτε ότι τα ονόματα των μεταβλητών μας ξεκινούν με το σύμβολο $. Έτσι η Perl καταλαβαίνει ότι της ζητούμε να διαχειριστεί scalar variables. Κατά τα άλλα θα μπορούσαν να έχουν όποιο όνομα θέλουμε (π.χ. $foufoutos για τις τιμές σε Fahrenheit και $canivalos για τις τιμές σε Κελσίου), αρκεί να είναι μικρότερο από 255 χαρακτήρες (γράμματα, αριθμούς και την underscore) και να μην αρχίζει από αριθμό ή ειδικό χαρακτήρα. Προτιμούμε φυσικά ένα όνομα που να μας βοηθάει να καταλάβουμε αμέσως τι περιέχει η μεταβλητή. (Έχετε υπ’ όψιν σας πάντως ότι τα ονόματα των μεταβλητών είναι case sensitive. Για την Perl το $canivalos και το $Canivalos είναι δύο διαφορετικές μεταβλητές.)

Με βάση τα παραπάνω λοιπόν η εξίσωση θα γίνει:

$cen = ($fah-32)*5/9

Ας προχωρήσουμε τώρα στη δημιουργία ολόκληρου του προγράμματος:

#!/usr/bin/perl -w

use strict;

Αν και δεν είναι υποχρεωτικές, όλα τα προγράμματά μας πρέπει να ξεκινούν με αυτές τις δύο γραμμές. Η πρώτη (#!/usr/bin/perl –w) δηλώνει στην Perl ότι πρέπει να μας εμφανίζει όλα τα προειδοποιητικά μηνύματα όταν τρέχει το πρόγραμμά μας. Έτσι, μας είναι ευκολότερο να αναγνωρίζουμε τα λάθη μας, ενώ ακόμη και να το πρόγραμμα λειτουργεί κανονικά γνωρίζουμε σε ποια σημεία του υπάρχει κάτι περίεργο που μπορεί κάποτε να δημιουργήσει προβλήματα (π.χ. αν το πρόγραμμα τρέξει σε άλλη μηχανή).

Έχετε υπ’ όψιν σας πάντως ότι οι συμβουλές που θα λάβετε δεν πρέπει να θεωρούνται ως η απόλυτη αλήθεια. Μπορεί το μήνυμα λάθους να αναφέρει ότι το πρόβλημα είναι στη γραμμή 12 και τελικά αυτό να βρίσκεται στη γραμμή 10 ή ακόμη και στην 7. Τέλος, να θυμάστε ότι τα πιο συνηθισμένα λάθη σας θα είναι να ξεχνάτε το ; στο τέλος των γραμμών ή θα χάνετε το λογαριασμό και δεν θα κλείνετε κάποιο άγκιστρο (}). Γι’ αυτό και στην Perl συνηθίζουμε να τοποθετούμε κάθε νέο άγκιστρο που ανοίγει 4 διαστήματα πιο μέσα από το προηγούμενο και να γράφουμε στην ίδια κάθετο με αυτό όλο τον κώδικα που περιέχει. Έτσι, μας είναι οπτικά πιο εύκολο να βλέπουμε ποιος κώδικας περιέχεται σε άγκιστρα και να τα κλείνουμε όλα όπου πρέπει.

Η δεύτερη (use strict) ενημερώνει τον compiler ο οποίος θα διαχειριστεί το πρόγραμμά μας ότι πρέπει να εμποδίσει τη χρήση «επικίνδυνων» εντολών ή συντακτικού. Η Perl είναι μια πολύ ευέλικτη γλώσσα και μας επιτρέπει να κάνουμε πολλά λάθη χωρίς να σταματήσει να λειτουργεί.

Η use strict μας υποχρεώνει να γράφουμε με πιο δομημένο και σωστό τρόπο. Σας συνιστώ λοιπόν ανεπιφύλακτα τη χρήση της.

print "Welcome to the Fahrenheit to Centigrade script\n";

print "Please type a temperature in Fahrenheit:\n";

Ακολουθούν δύο μηνύματα που θέλουμε να εμφανιστούν στην οθόνη του χρήστη και λειτουργούν όπως και το Hello World. Το πρώτο τον καλωσορίζει στην εφαρμογή, ενώ το δεύτερο του ζητά να πληκτρολογήσει μια τιμή σε βαθμούς Fahrenheit.

my $fah;

Στη συνέχεια δηλώνουμε την scalar variable η οποία θα «κρατάει» την τιμή της θερμοκρασίας σε Fahrenheit. Στην Perl δεν είναι υποχρεωτικό να δηλώσουμε ανεξάρτητα κάποια μεταβλητή. Το πρόγραμμα θα λειτουργούσε άριστα και χωρίς το my $fah επειδή η Perl αναγνωρίζει αυτόματα τις μεταβλητές ακόμη και αν τις χρησιμοποιήσουμε «ξαφνικά» χωρίς προηγούμενη δήλωση. Για λόγους σωστής δομής των προγραμμάτων μας όμως σας συνιστώ πάντοτε να τις ορίζετε.

(Η use strict; απαιτεί οπωσδήποτε τη χρήση της my. Για λόγους ταχύτητας όμως μπορείτε να την ορίζετε ταυτόχρονα με την τιμή της. Π.χ. my $price = 15.)

Αξίζει να παρατηρήσουμε ότι στα μικρά προγράμματα που δοκιμάζουμε εδώ είναι πολύ εύκολο να καταλάβουμε τι συμβαίνει και η αναγκαιότητα της δομής δεν φαίνεται τόσο μεγάλη. Αν όμως δημιουργήσουμε ένα σχετικά μεγάλο πρόγραμμα τότε (αν το ξανακοιτάξουμε μετά από μερικές εβδομάδες) θα δυσκολευτούμε πολύ να καταλάβουμε τι συμβαίνει μέσα σε αυτό, ενώ θα είναι σχεδόν αδύνατον για κάποιον άλλον να καταλάβει τον κώδικά μας και να μας βοηθήσει σε κάποιο πρόβλημα.

Σημειώστε τέλος ότι δεν χρειάστηκε να δηλώσουμε στην Perl τι είδους δεδομένα εμπεριέχονται στις μεταβλητές μας. Το $fah θα μπορούσε να είναι ακέραιος αριθμός (θετικός ή αρνητικός), δεκαδικός ή κείμενο χωρίς αυτό να δημιουργήσει κάποιο πρόβλημα. Η Perl αναγνωρίζει αυτόματα το περιεχόμενο και το διαχειρίζεται ανάλογα. Φυσικά εμείς έχουμε την υποχρέωση να μη ζητήσουμε παράλογα πράγματα (π.χ. αφαίρεση μεταβλητής που περιέχει αριθμό από άλλη που περιέχει κείμενο).

$fah = <STDIN>;

chomp ($fah);

Με τις παραπάνω εντολές δηλώνουμε στην Perl ότι θα λάβει την τιμή σε Fahrenheit μέσω του πληκτρολογίου.

Το $fah = <STDIN> σημαίνει ότι η μεταβλητή $fah θα πάρει την τιμή της από το STDIN (standard input), δηλαδή από το πληκτρολόγιο. Για να γίνει αυτό ο χρήστης θα πρέπει να πληκτρολογήσει την τιμή και να πατήσει Enter. Πατώντας το Enter όμως ο υπολογιστής δεν θα λάβει μόνο την τιμή που πληκτρολογήθηκε, αλλά και το πάτημα του Enter (δηλαδή την εντολή για αλλαγή γραμμής). Εμείς όμως θέλουμε μόνο την τιμή και όχι την αλλαγή γραμμής, γι’ αυτό και χρησιμοποιούμε την chomp () για να «καθαρίσουμε» τα δεδομένα που δίνουμε στην Perl από αλλαγές γραμμών.

my $cen = ($fah-32)*5/9;

Ακολουθεί ο ορισμός της μεταβλητής $cen όπου πολύ απλά δηλώνουμε ότι η $cen είναι ίση με την εξίσωση ($fah-32)*5/9. Αφού η Perl γνωρίζει ήδη την τιμή της $fah, η $cen υπολογίζεται άμεσα και εύκολα. Το μόνο που μας μένει λοιπόν είναι να δώσουμε το αποτέλεσμα στον χρήστη.

print "The equivalent of $fah degrees Fahrenheit is $cen Celcious\n";

Όπως μπορείτε να δείτε, μέσα στην print μπορούμε να τοποθετήσουμε τις μεταβλητές μας. Έτσι ο χρήστης θα δει την τιμή που πληκτρολόγησε ο ίδιος, αλλά και το αποτέλεσμα που υπολόγισε το πρόγραμμα.

print "Thank you for using this program\n";

Τέλος, το πρόγραμμα τελειώνει με ένα αποχαιρετιστήριο μήνυμα. Στην Perl δεν χρειάζεται να δηλώσουμε κάποια ειδική εντολή τέλους. Όταν εκτελεστεί και η τελευταία γραμμή κώδικα, το πρόγραμμα θα σταματήσει από μόνο του.

Ο πλήρης κώδικας λοιπόν της εφαρμογής μας είναι ο ακόλουθος:

#!/usr/bin/perl -w

use strict;

print "Welcome to the Fahrenheit to Centigrade script\n";

print "Please type a temperature in Fahrenheit:\n";

my $fah;

$fah = <STDIN>;

chomp ($fah);

my $cen = ($fah-32)*5/9;

print "The equivalent of $fah degrees Fahrenheit is $cen Celcious\n";

print "Thank you for using this program\n";


Τρέχουσα Ενότητα: Perl


 

Φιλικά - συνεργαζόμενα sites: Left Handed Products


© Eeei.gr 2009