# Ερχόμενοι από μια άλλη γλώσσα Ξέρετε ήδη να προγραμματίζετε. Φτάνετε σε ένα hash, σε έναν βρόχο, σε μια συνάρτηση, σε ένα regex χωρίς να το σκέφτεστε - σε κάποια άλλη γλώσσα. Αυτοί οι οδηγοί διδάσκουν την Perl αντιστοιχίζοντας αυτό που ήδη κάνετε με το πώς το κάνει η Perl, μία κατασκευή τη φορά. Το λεξικό σας είναι ένα hash της Perl· εδώ είναι η σύνταξη, και εδώ είναι το ένα σημείο όπου η αναλογία στάζει. Κάθε οδηγός προϋποθέτει ότι είστε **ευχερείς στη γλώσσα προέλευσης και νέοι στην Perl**. Δεν σας ξαναδιδάσκει τη γλώσσα προέλευσης. Διδάσκει την πλευρά της Perl σε κάθε ζευγάρωμα: τη σύνταξη, το ιδίωμα, και - το πιο χρήσιμο απ” όλα - την παγίδα που κρύβει η επιφανειακή ομοιότητα. Κάθε οδηγός σε αυτή τη σειρά καλύπτει τα **ίδια θέματα με την ίδια σειρά**, ώστε η αντιστοίχιση να είναι συγκρίσιμη μεταξύ γλωσσών και η σειρά να επεκτείνεται καθαρά καθώς προστίθενται νέες γλώσσες. Η σειρά κινείται από αυτά που μοιράζεται κάθε γλώσσα (μεταβλητές, συμβολοσειρές, αριθμοί), μέσα από τα διακριτικά σχήματα της Perl (sigils, ο διαχωρισμός array/hash, και το **περιβάλλον** - η μία ιδέα που δεν έχει καμία άλλη γλώσσα), προς τη δομή (υπορουτίνες, αναφορές, αρθρώματα, αντικείμενα), και τέλος μέσα από την επιφάνεια εργασίας (regex, I/O, χειρισμός σφαλμάτων, ιδιώματα), καταλήγοντας σε μια ανά γλώσσα συλλογή των παγίδων που πραγματικά δαγκώνουν. ## Ποιον οδηγό θέλετε - [Από Python σε Perl](python.md) - sigils εκεί που η Python δεν έχει κανένα, ο διαχωρισμός array/hash εκεί που η Python έχει `list` και `dict`, comprehensions ξαναγραμμένα ως `map`/`grep`, και η έννοια του περιβάλλοντος για την οποία η Python δεν έχει λέξη. - [Από PHP σε Perl](php.md) - έχετε ήδη το `$`, αλλά στην Perl αλλάζει ανάλογα με την προσπέλαση, ο ένας τύπος `array` της PHP χωρίζεται σε `@array` και `%hash`, και τα `.` έναντι `+` (και `==` έναντι `eq`) παύουν να είναι εναλλάξιμα. - [Από Ruby σε Perl](ruby.md) - τα blocks γίνονται μπλοκ και closures της Perl, οι κλήσεις-μεθόδων-σε-όλα γίνονται απλές συναρτήσεις, και το «μόνο τα `nil` και `false` είναι ψευδή» της Ruby αντιστρέφεται στην αλήθεια της Perl. - [Από Lua σε Perl](lua.md) - ο ένας τύπος table χωρίζεται σε `@array` και `%hash`, η ευρετηρίαση γίνεται 0-based, τα μοτίβα της Lua γίνονται πραγματικά regex, και οι πολλαπλές τιμές επιστροφής είναι η γέφυρά σας προς το περιβάλλον της Perl. - [Sed to Perl](sed.md) - the same `s///` you already know, sed’s `y///` becomes `tr///`, address ranges become the `/a/ .. /b/` flip-flop, and the hold space becomes an ordinary Perl variable. - [Awk to Perl](awk.md) - Perl grew out of awk, so almost everything maps directly: fields become `@F` and `split`, `NR` becomes `$.`, associative arrays become hashes, and `BEGIN`/`END` keep their names. - [Shell to Perl](shell.md) - for when a shell script outgrew itself: `$(cmd)` becomes `qx{}`, the `[ ]`/`-f` file tests carry straight over, and the `${var#...}` parameter expansions become real regex. - [Tcl to Perl](tcl.md) - a carry-over for Tcl maintainers: `set x` becomes `my $x`, `[expr {}]` disappears into native operators, lists and `array` become Perl arrays and hashes, and `regsub` becomes `s///`. ## Η μία έννοια που πρέπει να διαβάσετε πρώτη Αν διαβάσετε μόνο μία ενότητα από όποιον οδηγό ταιριάζει στο υπόβαθρό σας, διαβάστε το **Περιβάλλον**. Κάθε άλλη γλώσσα σε αυτή τη σειρά συμπτύσσει μια συλλογή σε ένα πλήθος, σε ένα πρώτο στοιχείο, ή σε μια λογική τιμή με ρητή σύνταξη (`len(x)`, `x[0]`, `bool(x)`). Η Perl το κάνει μέσω του *περιβάλλοντος*: η ίδια έκφραση δίνει μια λίστα σε ένα σημείο και ένα μοναδικό βαθμωτό σε άλλο, ανάλογα με το πού τη γράψατε. Είναι η πηγή των περισσότερων συγχύσεων του τύπου «γιατί ο πίνακάς μου έγινε ο αριθμός 3;», και μόλις το συλλάβετε η υπόλοιπη Perl μπαίνει στη θέση της. ## Μια σημείωση για το runtime These guides target `pperl`, a faithful Rust reimplementation of Perl 5.42. Every Perl example that runs as a script was executed on `pperl` and shows real output. The text-processing guides (sed, awk, shell) also show the classic `perl -ne`/`perl -pe` one-liner forms, which are the idiomatic Perl equivalent; the implicit-loop switches behind them are not yet recognised by this `pperl` build, so those one-liners are shown for reference and paired with an explicit-loop script you can run today.