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

Η χρήση της local

Είδαμε ότι αν δηλώσουμε μια μεταβλητή χρησιμοποιώντας το my στο κύριο σώμα του προγράμματός μας, αυτή θα είναι διαθέσιμη και σε όλα τα blocks που αυτό περιλαμβάνει. Αν όμως δηλώσουμε με το my μια μεταβλητή σε κάποιο block, αυτή δεν θα είναι διαθέσιμη σε όσα blocks περιέχει αυτό.

Στον ακόλουθο κώδικα καλούμε ένα block (το justaroutine) που με τη σειρά του καλεί ένα άλλο (το insideroutine):

#!/usr/bin/perl -w

# use strict;

my $a = 85;

my $b = 99;

my $c = 138;

&justaroutine ($a,$b,$c);

sub justaroutine

{

my ($value1, $value2, $value3) = @_;

my $sum = $value1 + $value2 + $value3 ;

&insideroutine();

}

sub insideroutine

{print "$sum\n";}

Η υπορουτίνα insideroutine προσπαθεί να τυπώσει τη μεταβλητή $sum που ορίσαμε μέσα στην justaroutine με το my και αποτυγχάνει (το μήνυμα λάθους είναι «Name "main::sum" used only once: possible typo…»)

Ακολουθεί το ίδιο ακριβώς πρόγραμμα με τη διαφορά πως αντί για my $sum εδώ έχουμε local $sum. Με τον τρόπο αυτό η Perl θα «θυμάται» (θα αναγνωρίζει) αυτή τη μεταβλητή και σε όσα blocks περιέχονται στην insideroutine. (Υπενθυμίζουμε πως block θεωρούμε οτιδήποτε περικλείεται από άγκιστρα και όχι μόνο τις υπορουτίνες. Παρουσιάζουμε όμως παραδείγματα με υπορουτίνες διότι είναι πιο εύκολο να γίνουν κατανοητά.)

#!/usr/bin/perl -w

# use strict;

my $a = 85;

my $b = 99;

my $c = 138;

&justaroutine ($a,$b,$c);

sub justaroutine

{

my ($value1, $value2, $value3) = @_;

local $sum = $value1 + $value2 + $value3 ;

&insideroutine();

}

sub insideroutine

{print "$sum\n";}

Εδώ η εκτύπωση θα δώσει 322.


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


 

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


© Eeei.gr 2009