Εισαγωγή στην Perl μέρος δεύτερο

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
stevebat
Script Master
Δημοσιεύσεις: 307
Εγγραφή: 05 Αύγ 2009 15:54
Επικοινωνία:

Εισαγωγή στην Perl μέρος δεύτερο

Δημοσίευση από stevebat » 15 Αύγ 2010 16:29

Βοηθημα Perl για αρχαριους.
Τα πάντα όλα θα πούμε εδώ πέρα !!
Perl τύποι μεταβλητών

Η Perl έχει 3 κύριους τύπους μεταβλητών : scalars, arrays, and hashes.

• Scalars

Μια scalar αντιπροσωπεύει μια μοναδική τιμή
Πληροφορίες για την my http://perldoc.perl.org/functions/my.html

Κώδικας: Επιλογή όλων

1.        my $animal = "camel";
2.        my $answer = 42;
Οι τιμές των scalars μπορούν να είναι strings, ακέραιοι(integers) ή αριθμοί κινητής υποδιαστολής(floating point numbers) και η Perl αυτόματα θα τις μετατρέψει όπως χρειάζονται. Δεν χρειάζεται να προ-δηλωνετε τους τύπους των μεταβλητών σας αλλά πρέπει να δηλώσετε τις μεταβλητες χρησιμοποιώντας την εντολή my(σε αυτή την περίπτωση θα πρέπει να έχετε δηλώσει πιο πριν την εντολή use strict;(για περισσότερα ανατρέξτε στο πρώτο βοήθημα http://www.freestuff.gr/forums/viewtopic.php?t=51428))
Οι τιμές των scalars μπορούν χρησιμοποιηθούν με ποικίλους τρόπους:

Κώδικας: Επιλογή όλων

3.        print $animal;
4.        print "Το ζώον είναι $animal\n";
5.        print "Το τετράγωνο της $answer είναι ", $answer * $answer, "\n";
Υπάρχουν πολλές "μαγικές" scalars με ονόματα που μοιάζουν με στίξεις η με θορύβους γραμμής(line noise). Αυτές οι ιδικές μεταβλητές χρησιμοποιούνται για πολλούς σκοπούς (δείτε περισσότερα για αυτές εδώ http://perldoc.perl.org/perlvar.html). Το μόνο πράγμα που χρειάζεται να ξέρετε ότι η $_witch είναι (default μεταβλητή) και χρησιμοποιείται σαν η default argument σε μια σειρά από functions στην Perl

Κώδικας: Επιλογή όλων

6.        print;          # εμφανίζει ό,τι περιέχει η $_ από default
• Arrays

Μια array αντιπροσωπεύει μια λίστα από τιμές:

Κώδικας: Επιλογή όλων

1.        my @animals = ("camel", "llama", "owl");
2.        my @numbers = (23, 42, 69);
3.        my @mixed   = ("camel", 42, 1.23);
Οι Arrays είναι zero-indexed. Δείτε πως περνούμε τα στοιχεία από μια array:

Κώδικας: Επιλογή όλων

4.        print $animals[0];              # εμφανίζει "camel"
5.        print $animals[1];              # εμφανίζει "llama"
Η ειδική μεταβλητή $#array εμφανίζει το τελευταίο στοιχείo από μια array

Κώδικας: Επιλογή όλων

6.        print $mixed[$#mixed];       # το τελευταίο στοιχείο, εμφανιζει 1.23
Μπορεί να μπείτε στον πειρασμό να χρησιμοποιήσετε $#array + 1 για να πείτε πόσα στοιχεία υπάρχουν σε μια array αλλά δεν χρειάζεται. Διότι αυτό συμβαίνει χρησιμοποιώντας @array όπου η Perl περιμένει να βρει μια τιμή scalar θα σας δώσει τον αριθμό των στοιχείων σε μια array:

Κώδικας: Επιλογή όλων

7.        if &#40;@animals < 5&#41; &#123; ... &#125;
Τα στοιχεία που παίρνουμε από την array αρχίζουν με $ επειδή παίρνουμε μοναδικές τιμές έξω από την array. Ζητάμε scalar , παίρνουμε scalar τέλος.
Για να πάρουμε πολλαπλές τιμές από μια array:

Κώδικας: Επιλογή όλων

8.        @animals&#91;0,1&#93;;                  # δίνει &#40;"camel", "llama"&#41;;
9.        @animals&#91;0..2&#93;;                 # δίνει &#40;"camel", "llama", "owl"&#41;;
10.        @animals&#91;1..$#animals&#93;;         # δίνει τα πάντα εκτός του πρώτου στοιχείου
Αυτό αποκαλείτε ως "array slice".
Μπορείτε να κάνετε ποικίλα χρήσιμα πράγματα στις λίστες

Κώδικας: Επιλογή όλων

11.        my @sorted    = sort @animals;
12.        my @backwards = reverse @numbers;
Δείτε περισσότερα εδώ http://perldoc.perl.org/perlvar.html
Για το τι είναι το sort δείτε εδώ http://perldoc.perl.org/functions/sort.html
Για το τι είναι το reverse δείτε εδώ http://perldoc.perl.org/functions/reverse.html

&#8226; Hashes

Μια hash αντιπροσωπεύει ένα σύνολο από key/value ζευγάρια:

Κώδικας: Επιλογή όλων

1.        my %fruit_color = &#40;"apple", "red", "banana", "yellow"&#41;;
Μπορείτε να χρησιμοποιήσετε κενά και το => για να τα εμφανίσετε πιο όμορφα:

Κώδικας: Επιλογή όλων

2.        my %fruit_color = &#40;
3.            apple  => "red",
4.            banana => "yellow",
5.        &#41;;
Για να πάρετε τα στοιχεία μιας hash:

Κώδικας: Επιλογή όλων

6.        $fruit_color&#123;"apple"&#125;;           # δεινει "red"
Μπορείτε να πάρετε μια λίστα από keys και values χρησιμοποιώντας keys() και values().
Περισσότερα για keys() http://perldoc.perl.org/functions/keys.html
Περισσότερα για values() http://perldoc.perl.org/functions/values.html

Κώδικας: Επιλογή όλων

7.        my @fruits = keys %fruit_colors;
8.        my @colors = values %fruit_colors;
Όπως οι scalars και οι arrays έχουν ιδιαίτερους χαρακτήρες έτσι έχουν και οι hashes. O πιο γνωστός είναι ο %ENV οποίος περιέχει "environment variables".
Για τις scalars, arrays και hashes θα βρείτε πιο αναλυτικά http://perldoc.perl.org/perldata.html

Πιο σύνθετοι τύποι δεδομένων μπορούν να κατασκευαστούν χρησιμοποιώντας αναφορές (references), οι οποίες μας αφήνουν να δημιουργήσουμε λίστες και hashes μέσα υπάρχουσες λίστες και hashes.

Μια reference είναι μια τιμή scalar και μπορεί να αναφέρετε σε οποιαδήποτε άλλον Perl τύπο δεδομένων. Έτσι βάζοντας μια reference σαν τιμή μιας arrays ή στοιχείο hash, μπορούμε εύκολα να δημιουργήσουμε λίστες και hashes μέσα σε λίστες και hashes. Το παρακάτω παράδειγμα δείχνει μια δευτέρου επιπέδου hash από τη δομη hash χρησιμοποιώντας ανώνυμες hash αναφορές.

Κώδικας: Επιλογή όλων

1.        my $variables = &#123;
2.            scalar  =>  &#123;
3.                         description => "single item",
4.                         sigil => '$',
5.                        &#125;,
6.            array   =>  &#123;
7.                         description => "ordered list of items",
8.                         sigil => '@',
9.                        &#125;,
10.            hash    =>  &#123;
11.                         description => "key/value pairs",
12.                         sigil => '%',
13.                        &#125;,
14.        &#125;;
15.    
16.        print "Οι Scalars αρχίζουν με $variables->&#123;'scalar'&#125;->&#123;'sigil'&#125;\n";
Όλα τα χρήσιμα λινκς για επιπρόσθετες πληροφορίες
http://perldoc.perl.org/perlreftut.html
http://perldoc.perl.org/perllol.html
http://perldoc.perl.org/perldsc.html

Εμβέλεια Μεταβλητών (Variable scoping)
Στην προηγούμενη ενότητα όλα τα παραδείγματα χρησιμοποιούν την syntax:

Κώδικας: Επιλογή όλων

1.        my $var = "value";
Το my δεν είναι απαραίτητο μπορείτε να τις χρησιμοποιήσετε και έτσι:

Κώδικας: Επιλογή όλων

1.        $var = "value";
Ωστόσο η παραπάνω χρήση θα δημιουργήσει καθολικές μεταβλητές σε όλο το πρόγραμμα, πράγμα που είναι κακό προγραμματιστικά. Το my δημιουργεί αντίθετος λεξιλογικές scoped μεταβλητές. Οι μεταβλητές είναι scoped στο block (π.χ. μια δέσμη από δηλώσεις περικυκλωμένη από άγκιστρα(curly-braces)) στα οποία είναι ορισμένα

Κώδικας: Επιλογή όλων

1.        my $x = "foo";
2.        my $some_condition = 1;
3.        if &#40;$some_condition&#41; &#123;
4.            my $y = "bar";
5.            print $x;           # εμφανίζει "foo"
6.            print $y;           # εμφανίζει "bar"
7.        &#125;
8.        print $x;               # εμφανίζει "foo"
9.        print $y;               # δεν εμφανίζει τίποτα; $y has fallen out of scope
Χρησιμοποιώντας το my σε συνδυασμό με το use strict; στην αρχή του script σημαίνει ότι ο διερμηνέας θα πιάσει κάποια συχνά προγραμματιστικά errors. Για παράδειγμα στο προηγούμενο παράδειγμα το τελευταίο print $y θα δημιουργήσει ένα μεταγλωττιστηκό error και θα μας εμποδίσει να τρέξουμε το πρόγραμμα. Είναι καλό να χρησιμοποιούμε strict;

Conditional and looping constructs

Η Perl έχει τα περισσότερα από τα συνηθισμένα conditional και looping constructs. Εχει και η Perl case/switch (spelled given /when). Δείτε περισσότερα http://perldoc.perl.org/perlsyn.html#Switch-statements

Δείτε μια λίστα από operators στην επόμενη ενότητα για πληροφορίες σχετικά με comparison και boolean logic operators τα χρησιμοποιούνται πολύ συχνά σε conditional statements.

- if

Κώδικας: Επιλογή όλων

1.        if &#40; condition &#41; &#123;
2.            ...
3.        &#125; elsif &#40; αλλη condition &#41; &#123;
4.            ...
5.        &#125; else &#123;
6.            ...
7.        &#125;
Υπάρχει επίσης μια negated έκδοση:

Κώδικας: Επιλογή όλων

8.        unless &#40; condition &#41; &#123;
9.            ...
10.        &#125;
Σημειώστε ότι τα braces είναι απαραίτητα στην Perl, ακόμα και αν έχετε μια γραμμή στο block.

while

Κώδικας: Επιλογή όλων

11.        while &#40; condition &#41; &#123;
12.            ...
13.        &#125;
Υπάρχει άλλη μια εντολή που κάνει το ίδιο με την unless.

Κώδικας: Επιλογή όλων

14.        until &#40; condition &#41; &#123;
15.            ...
16.        &#125;
Μπορούμε επίσης να χρησιμοποιήσουμε while σε ένα post-condition:

Κώδικας: Επιλογή όλων

17.        print "LA LA LA\n" while 1;          # loops για παντα
&#8226; for

Ακριβώς όπως στην C και PHP

Κώδικας: Επιλογή όλων

1.        for &#40;$i = 0; $i <= $max; $i++&#41; &#123;
2.            ...
3.        &#125;
To style της C για loop είναι λίγο σπάνιο στην Perl αφού η Perl παρέχει πιο φιλικό list scaning το foreach loop

&#8226; foreach

Κώδικας: Επιλογή όλων

1.        foreach &#40;@array&#41; &#123;
2.            print "This element is $_\n";
3.        &#125;
4.    
5.        print $list&#91;$_&#93; foreach 0 .. $max;
6.    
7.        # you δεν χρειάζεται να χρησιμοποιήσετε το default $_ either...
8.        foreach my $key &#40;keys %hash&#41; &#123;
9.            print "Η τιμή της $key είναι $hash&#123;$key&#125;\n";
10.        &#125;
Για περισσότερες πληροφορίες σχετικά με looping constructs δείτε http://perldoc.perl.org/perlsyn.html

Ορίστε ένα login script για να δείτε την δομή του

Κώδικας: Επιλογή όλων

 #!/usr/bin/perl

#Basic stuff
use CGI qw&#40;&#58;standard escapeHTML&#41;;

# Were the routines are
do '/home/andrew/Public/routines.pl';

# Were database files are
my $dbapache = '/home/andrew/Public/data/dbapache';
my $dbmail = '/home/andrew/Public/data/dbmail';
my $dbscript = '/home/andrew/Public/data/dbscript';

# Main page
my $url_main = 'http&#58;//freestuff.gr';


# Get values from form
my $name = param&#40;'name'&#41;;
my $password = param&#40;'password'&#41;;

# Check for blanks

unless &#40;param&#40;'name'&#41;&#41;&#123;noname&#40;'a username'&#41;&#125;;
unless &#40;param&#40;'password'&#41;&#41;&#123;noname&#40;'a password'&#41;&#125;;

# Check if all ready logged in

$keyinfo = cookie&#40;'k0rn09.ath.cx'&#41;;

if &#40;$keyinfo = cookie&#40;'k0rn09.ath.cx'&#41;&#41; &#123;
    get_userinfo_cookie&#40;$keyinfo&#41;;
    
print "Content-type&#58; text/html\n\n";
HEADER&#40;'Identified'&#41;;
print <<EOT;
<center><H1>All Ready Logged In</H1></center>
<center>You are logged in as<br><br>
Name&#58; $cachedname <br><br>
Password&#58; $cachedpassword <br><br>
E-Mail&#58; $cachedemail <br><br>
Groups&#58; $cachedgroups </center><br>
<center><a href="$url_main">Main Page!</a></center>
EOT
FOOTER&#40;&#41;;
exit; #We Stop here
    &#125;
    else &#123;
        $register = 1;
    &#125;

if &#40;$register == 1&#41; &#123;
    get_user_name&#40;$name&#41;;

&#125;
if &#40;$password eq $cachedpassword&#41; &#123;
    
    $cookie = cookie&#40;
                -NAME => 'k0rn09.ath.cx',
                -VALUE => $cachedkey,
                -EXPIRES => '+12h',
            &#41;;
            print header&#40;-cookie => $cookie&#41;;

HEADER&#40;'Successful'&#41;;
print <<EOF;
<h1><center>Login Succesfull!</center></h1>
<center>You are registered as<br><br>
Name&#58; $cachedname <br><br>
Password&#58; $cachedpassword <br><br>
E-Mail&#58; $cachedemail <br><br>
Groups&#58; $cachedgroups </center><br>
<center><a href="$url_main">Main Page!</a></center>
EOF
FOOTER&#40;&#41;;
    &#125;



else &#123;
    print "Content-type&#58; text/html\n\n";
    HEADER&#40;'Incorrect'&#41;;
    print <<EOF;
    <h1><center>Incorrect</center></h1><br><br>
    <center>The username or password you have supplied is incorrect</center><br>
    <center><a href="$url_main">Main Page!</a></center>

EOF
FOOTER&#40;&#41;;
exit #We stop here
    &#125;  
Συγγνώμη που ανακάτεψα ελληνικές με αγγλικές λέξεις δεν μπορούσα να τις μεταφράσω
και επίσης συγχωρέστε με αν έκανα λάθος στη σύνταξη

To be continued
Τελευταία επεξεργασία από το μέλος stevebat την 15 Αύγ 2010 17:33, έχει επεξεργασθεί 4 φορές συνολικά.

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Εισαγωγή στην Perl μέρος δεύτερο

Δημοσίευση από Basilakis » 15 Αύγ 2010 16:51

Χαρά στο κουράγιο σου! :)

Άβαταρ μέλους
stevebat
Script Master
Δημοσιεύσεις: 307
Εγγραφή: 05 Αύγ 2009 15:54
Επικοινωνία:

Εισαγωγή στην Perl μέρος δεύτερο

Δημοσίευση από stevebat » 15 Αύγ 2010 16:53

χεχε παιδεύομαι από τις 9 το πρωί :p :pint:

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Εισαγωγή στην Perl μέρος δεύτερο

Δημοσίευση από cordis » 15 Αύγ 2010 17:38

μπράβο, πολύ ωραίο βοήθημα :)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

FreeZ
Δημοσιεύσεις: 142
Εγγραφή: 14 Δεκ 2008 11:58

Εισαγωγή στην Perl μέρος δεύτερο

Δημοσίευση από FreeZ » 15 Αύγ 2010 18:38

Κατι μπορει να μαθει και ο πιο ασχετος. Μπραβο !
Εικόνα

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες