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

Προσθήκη (concatenation), μαθηματικές πράξεις, συντομογραφίες

Εδώ τα παραδείγματα θα είναι πολύ πιο παραστατικά από τις εξηγήσεις:

$foo = 'Καλημέρα';

$bar = $foo . 'Μαρία';

print "$bar\n";

Το αποτέλεσμα της εκτύπωσης είναι:

ΚαλημέραΜαρία

Αυτή η διαδικασία λέγεται προσθήκη (concatenation) και προσέθεσε στο $foo που είχε την τιμή Καλημέρα την ακολουθία χαρακτήρων Μαρία. Αν το $foo αντί για "Καλημέρα" είχε την τιμή "Καλημέρα " (υπήρχε δηλαδή και διάστημα) τότε το αποτέλεσμα της εκτύπωσης θα ήταν Καλημέρα Μαρία.

$foo = 'Καλημέρα';

$bar = $foo x3;

print "$bar\n";

Το αποτέλεσμα της εκτύπωσης είναι:

ΚαλημέραΚαλημέραΚαλημέρα

Δηλαδή πολλαπλασιάσαμε το $foo επί 3.

$foo = 'Γιώργος ';

$foo .= 'Επιτήδειος';

print "$foo\n";

Αυτή είναι η συντομογραφία της προσθήκης και λειτουργεί όπως το ΚαλημέραΜαρία. Εδώ όμως γράψαμε "Γιώργος " αντί για "Γιώργος" (δηλαδή μετά το Γιώργος αφήσαμε ένα κενό) και η εκτύπωση δεν θα κολλήσει τις λέξεις, αλλά θα είναι:

Γιώργος Επιτήδειος

Αν τώρα θέλουμε να εκτυπώσουμε το:

This is the 12th day of the month, το πρόβλημα που έχουμε είναι ότι το th κανονικά δεν μπορεί να κολλήσει με τη μεταβλητή. Αν δώσουμε:

Print "This is the $dayth day of the month\n";

η Perl θα ψάξει να βρει τη μεταβλητή $dayth και φυσικά θα αποτύχει. Για να της εξηγήσουμε πού τελειώνει η μεταβλητή η σύνταξη θα πρέπει να είναι:

Print "This is the ${day}th day of the month\n";

Οι αγκύλες της εξηγούν ποια είναι τα όρια του ονόματος της μεταβλητής.

Ας δούμε τώρα μερικές άλλες ιδιομορφίες:

$foo = 1_500;

$bar = $foo + 1;

print "$bar\n";

Το αποτέλεσμα της εκτύπωσης είναι:

1501

Δηλαδή το 1_500 αναγνωρίζεται από την Perl ως 1.500

$foo = 1.500;

$bar = $foo + 1;

print "$bar\n";

Το αποτέλεσμα της εκτύπωσης είναι:

2,5

Δηλαδή το 1.500 αναγνωρίζεται από την Perl ως 1,5

$foo = 1,500;

$bar = $foo +1;

print "$bar\n";

Στο δικό μου σύστημα το αποτέλεσμα της εκτύπωσης είναι:

2

Δεν καταλαβαίνω γιατί συμβαίνει αυτό (αν κανείς γνωρίζει ας μου γράψει). Εγώ θα φανταζόμουν ότι αφού αναγνωρίζει το 1.500 ως 1,5 (κατά το αγγλοσαξονικό σύστημα γραφής) θα αναγνώριζε και το 1,500 ως 1.500. Σας το αναφέρω εδώ ως προειδοποίηση ότι η Perl μπορεί να αναγνωρίζει πολλά πράγματα αυτόματα (π.χ. αν μια μεταβλητή περιέχει αριθμούς ή χαρακτήρες), αλλά καμιά φορά συμβαίνουν και απρόοπτα.

$foo = 2*7;

$bar = ($foo-4)/2+7;

print "$bar\n";

Η Perl ακολουθεί την ίδια μαθηματική ακολουθία που μάθαμε και στο σχολείο (πρώτα οι πράξεις μέσα στις παρενθέσεις, μετά οι πολλαπλασιασμοί και οι διαιρέσεις και μετά οι προσθέσεις και αφαιρέσεις κινούμενοι από αριστερά προς τα δεξιά.

Το αποτέλεσμα της εκτύπωσης είναι:

12

Δυνάμεις:

$foo = 2 ** 3;

$bar = $foo ** 5;

print "$foo\n";

print "$bar\n";

Εδώ το $foo είναι 8 (2 εις την 3η), ενώ το $bar 32.768 (8 εις την 5η)

$foo = 5;

$bar = 5x3;

print "$bar\n";

Όπως και παραπάνω (ΚαλημέραΚαλημέραΚαλημέρα), εδώ έχουμε;

555

Αυτό θα συμβεί αν ξεχαστείτε και γράψετε x αντί για * (το σύμβολο του πολλαπλασιασμού).

$foo = 5;

$foo = $foo * 3;

print "$foo\n";

Προσέξτε ότι μια μεταβλητή μπορεί να μεταβάλει τον εαυτό της. Η παραπάνω σύνταξη είναι σωστή και μας δίνει ως εκτύπωση το 15.

Σωστή είναι επίσης και η φράση

$foo = $bar = 5;

όπου και οι δύο μεταβλητές αποκτούν την τιμή 5.

$foo = 5;

$foo *=3;

print "$foo\n";

Επειδή πολύ συχνά επιθυμούμε μια μεταβλητή να τροποποιήσει τον εαυτό της υπάρχει και σχετική συντομογραφία. Η $foo *=3 λειτουργεί ακριβώς όπως και η $foo = $foo * 3

$foo = 0;

$foo = ++$foo;

$bar = 9;

$lala = $bar--;

print "\$foo=$foo και \$bar=$bar και \$lala=$lala\n";

Εδώ έχουμε πιο πονηρά πράγματα. Η εκτύπωση μας δίνει:

$foo 1 και $bar 8 και $lala 9

Το $foo = ++$foo δηλώνει autoincrement, δηλαδή πάρε το $foo και πρόσθεσέ του μια μονάδα (γράφεται και $foo++ ή ++$foo). Έτσι, το $foo από 0 γίνεται 1.

Το $lala = $bar-- δηλώνει autodecrement (και μπορεί να γραφτεί επίσης ως --$bar)

Προσοχή όμως! Η σύνταξη αυτή δηλώνει: «Δώσε στο $lala την τιμή του $bar και μετά αφαίρεσε από το $bar μια μονάδα».

Τέλος, σας υπενθυμίζω ότι για να εκτυπώσουμε το «λέξη» $foo χρειάστηκε να γράψουμε \$foo διαφορετικά η Perl θα εκτύπωνε την τιμή της $foo, δηλαδή το 1.

my $a = 5;

my $b = 5;

my $c = $a++;

my $d = ++$b;

print "a = $a b = $b c = $c d = $d\n";

Το αποτέλεσμα της εκτύπωσης θα είναι:

a = 6 b = 6 c = 5 d = 6

Αυτό συμβαίνει διότι όταν τα ++ βρίσκονται μετά τη μεταβλητή ($a++) τότε η Perl πρώτα θα δώσει την τρέχουσα τιμή της μεταβλητής (εδώ η $c θα αποκτήσει την τιμή 5) και μετά θα την αυξήσει. Αντίθετα όταν τα ++ βρίσκονται πριν τη μεταβλητή (++$b) τότε η Perl πρώτα θα αυξήσει την τιμή της μεταβλητής (το $b) και μετά θα δώσει την νέα τρέχουσα τιμή κάπου αλλού (εδώ η $d λαμβάνει την τιμή 6).

$foo = 15;

$foo += 5;

print "$foo\n";

Το αποτέλεσμα της εκτύπωσης είναι:

20

Δηλαδή, με αυτή τη συντομογραφία προσθέσαμε το 5 στην ήδη υπάρχουσα τιμή του $foo και δεν χρειάστηκε να γράψουμε $foo = $foo + 5. Έχουμε δηλαδή:

$foo = $foo + 5;

Ανάλογα φυσικά λειτουργούν και τα -=, *=, /=, **= και %= (** είναι η δύναμη, ενώ % το υπόλοιπο, modulus, μιας διαίρεσης, π.χ. 15 % 4 = 3).


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


 

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


© Eeei.gr 2009