Προτεραιότητα#

Δύο μέρη, με αυτή τη σειρά: ο πλήρης πίνακας προτεραιότητας, και ο κανόνας ανάλυσης για ονομασμένους μοναδιαίους τελεστές - ενσωματωμένες συναρτήσεις των οποίων η σύνταξη δένει σε προτεραιότητα τελεστή αντί ως πλήρεις κλήσεις τελεστή λίστας.

Ο πλήρης πίνακας#

Σφιχτότεροι τελεστές στην κορυφή, χαλαρότεροι στο κάτω μέρος. Ίδια γραμμή = ίδια προτεραιότητα· ο συνδυασμός δύο τελεστών ίδιας γραμμής χρησιμοποιεί προσεταιριστικότητα. none = μη προσεταιριστικός (ο συνδυασμός δύο χωρίς παρενθέσεις είναι σφάλμα ή προειδοποίηση κατά τη χρονική στιγμή ανάλυσης).

Γραμμή

Προσεταιριστικότητα

Τελεστές

1

αριστερά

όροι, τελεστές λίστας (αριστερά)

2

αριστερά

->

3

καμία

++ --

4

δεξιά

**

5

δεξιά

! ~ \ μοναδιαίο + μοναδιαίο -

6

αριστερά

=~ !~

7

αριστερά

* / % x

8

αριστερά

+ - .

9

αριστερά

<< >>

10

καμία

ονομασμένοι μοναδιαίοι τελεστές

11

καμία

< <= > >= lt le gt ge

12

καμία

== != <=> eq ne cmp

13

αριστερά

&

14

αριστερά

| ^

15

αριστερά

&&

16

αριστερά

|| //

17

καμία

.. ...

18

δεξιά

?:

19

δεξιά

= += -= *= /= κλπ.

20

αριστερά

, =>

21

καμία

τελεστές λίστας (δεξιά)

22

δεξιά

not

23

αριστερά

and

24

αριστερά

or xor

Μερικοί πρακτικοί κανόνες:

  • Σύγκριση και λογική. Η σύγκριση (γραμμές 11–12) είναι σφιχτότερη από &&/||/// (γραμμές 15–16), οπότε η $a < $b && $c > $d λειτουργεί χωρίς εσωτερικές παρενθέσεις.

  • Bitwise έναντι σύγκρισης. Οι &, |, ^ (γραμμές 13–14) είναι χαλαρότεροι από τη σύγκριση. Η $x & 0xFF == 0 αναλύεται ως $x & (0xFF == 0). Σχεδόν πάντα βάζετε παρενθέσεις γύρω από bitwise.

  • Συμβολική έναντι λογικής λέξης. Οι &&/||/! είναι σφιχτοί (γραμμές 5, 15, 16). Οι and/or/not είναι πολύ χαλαροί (γραμμές 22–24). Ίδια λογική σημασία· διαφορετικό δέσιμο. Το κεφάλαιο logical δείχνει πού ταιριάζει ο καθένας.

  • Το = είναι χαλαρό. Γραμμή 19 - σχεδόν τα πάντα δένουν σφιχτότερα από την ανάθεση. Γι” αυτό η my $fh = open ... or die λειτουργεί: ο or (γραμμή 24) είναι ακόμα πιο χαλαρός από το =, οπότε η open ολοκληρώνει την ανάθεση πριν αποφασίσει ο or.

  • Οι τελεστές λίστας βρίσκονται στα δύο άκρα του πίνακα. Γραμμή 1 κοιτώντας αριστερά, γραμμή 21 κοιτώντας δεξιά. Ένας τελεστής λίστας όπως print ή sort απορροφά τα πάντα στα δεξιά του, μέχρι τον πρώτο τελεστή που δένει πιο χαλαρά από τη γραμμή 21 - που είναι μόνο not/and/or/xor. Η ενότητα named unary παρακάτω αντιπαραβάλλει αυτό με την περίπτωση ενός ορίσματος γραμμής 10.

Σε περίπτωση αμφιβολίας, γράψτε παρενθέσεις. Δεν κοστίζουν τίποτα και τεκμηριώνουν την πρόθεση.

Μετα- και προ-αύξηση / μείωση#

Η γραμμή 3 (++ και --) είναι μη προσεταιριστική. Οι μορφές προ- και μετα- διαφέρουν στο πότε συμβαίνει η παρενέργεια:

  • ++$x - αύξηση πρώτα, στη συνέχεια απόδοση της νέας τιμής.

  • $x++ - απόδοση της τρέχουσας τιμής, στη συνέχεια αύξηση.

my $x = 5;
my $a = ++$x;        # $x is now 6, $a is 6
my $b = $x++;        # $a was 6, $x++ yields 6 then increments,
                     # so $b is 6 and $x is now 7

Η ++ σε συμβολοσειρά εκτελεί τη μαγική αύξηση της Perl:

my $s = "aa";
$s++;                # "ab"
$s++;                # "ac"
# ...
$s = "az"; $s++;     # "ba"  - carries like base-26
$s = "Aa"; $s++;     # "Ab"  - case is preserved per-position
$s = "Az9"; $s++;    # "Ba0" - digits and letters carry independently

Η μαγική αύξηση είναι αυτό που κάνει τη 'a'..'zz' να παράγει όλους τους 702 δυόψηφους συνδυασμούς στο range.

Ονομασμένοι μοναδιαίοι τελεστές#

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

Η πρακτική συνέπεια είναι ένας κανόνας ανάλυσης:

Ένας ονομασμένος μοναδιαίος τελεστής αρπάζει το ένα του όρισμα άπληστα, και οτιδήποτε θα χρειαζόταν περισσότερα από ένα ορίσματα δεν ανήκει σε αυτόν.

defined $x + 1            # parses as: ( defined($x) ) + 1
                          # - NOT  defined($x + 1)
length $s > 3             # parses as: ( length($s) ) > 3
-e $f && -r _             # both file tests are named-unary;
                          # `&&` combines two boolean results

Συγκρίνετε με έναν τελεστή λίστας (print, sort, push, …), που βρίσκεται στη γραμμή 1 / 21 και απορροφά τα υπόλοιπα της έκφρασης:

print "n=", $n, "\n"      # print's argument list is "n=", $n, "\n"
                          # all three commas belong to print

Αν θέλετε μια ενσωματωμένη ονομασμένου μοναδιαίου τελεστή να δεχτεί πιο σύνθετο όρισμα, βάλτε παρενθέσεις:

defined($x + 1)           # explicit: argument is the sum $x+1
length($s . "x")          # length of $s with "x" appended

Η αδιαμφισβήτητη μορφή είναι πάντα διαθέσιμη. Σε περίπτωση αμφιβολίας, βάλτε παρενθέσεις.

Η λίστα ενσωματωμένων ονομασμένων μοναδιαίων τελεστών#

Αυτές οι ενσωματωμένες αναλύονται σε προτεραιότητα γραμμής 10. Κάθε μία συνδέεται στη σελίδα λεπτομερειών perlfunc - ο κανόνας ανάλυσης παραπάνω είναι το μόνο που χρειάζεται να γνωρίζετε γι” αυτές ως τελεστές· η συμπεριφορά συνάρτησης τους βρίσκεται στην αναφορά perlfunc.

defined, exists, ref, scalar, length, uc, lc, ucfirst, lcfirst, chr, ord, hex, oct, int, abs, sqrt, sin, cos, log, exp, rand, srand, alarm, sleep, caller, wantarray, chroot, readlink, umask, lstat, stat (όταν δίνεται ακριβώς ένα όρισμα), καθώς και όλοι οι τελεστές ελέγχου αρχείων (-e, -r, -w, -x, -f, -d, -l, -s και οι υπόλοιποι - δείτε την ενότητα τελεστές ελέγχου αρχείων παρακάτω).

Η πλαισίωση ως «τελεστής» στην κλασική τεκμηρίωση Perl είναι ιστορική. Σε σύγχρονους όρους Perl, αυτές είναι συναρτήσεις των οποίων η ανάλυση ορισμάτων τις τοποθετεί μεταξύ ολίσθησης bit και σύγκρισης στον πίνακα προτεραιότητας. Η ονομασία είναι ό,τι είναι· η συμπεριφορά είναι αυτό που μετράει.

Τελεστές ελέγχου αρχείων#

Οι έλεγχοι αρχείων είναι μοναδιαίοι τελεστές (προτεραιότητα ονομασμένου μοναδιαίου) που εξετάζουν μια ιδιότητα αρχείου ή filehandle. Αρχίζουν με παύλα και ένα γράμμα. Όλοι επιστρέφουν λογική τιμή εκτός από τον -s (μέγεθος αρχείου σε bytes), τους -M/-A/-C (ηλικία σε ημέρες, κλασματικά) και τους ελέγχους ανάγνωσης -T/-B (λογικοί αλλά ελαφρώς πιο αργοί επειδή διαβάζουν το αρχείο).

Τελ.

Έλεγχος

Επιστρέφει

-e

exists

λογική τιμή

-r

αναγνώσιμο από effective UID

λογική τιμή

-w

εγγράψιμο από effective UID

λογική τιμή

-x

εκτελέσιμο από effective UID

λογική τιμή

-o

ιδιοκτησία effective UID

λογική τιμή

-R

αναγνώσιμο από real UID

λογική τιμή

-W

εγγράψιμο από real UID

λογική τιμή

-X

εκτελέσιμο από real UID

λογική τιμή

-O

ιδιοκτησία real UID

λογική τιμή

-z

μηδενικό μέγεθος

λογική τιμή

-s

μη μηδενικό μέγεθος

μέγεθος σε bytes ή ψευδές

-f

κανονικό αρχείο

λογική τιμή

-d

κατάλογος

λογική τιμή

-l

symbolic link

λογική τιμή

-p

ονομαστικός σωλήνας (FIFO)

λογική τιμή

-S

socket

λογική τιμή

-b

ειδικό αρχείο block

λογική τιμή

-c

ειδικό αρχείο χαρακτήρων

λογική τιμή

-t

TTY (τερματικό)

λογική τιμή

-u

bit setuid

λογική τιμή

-g

bit setgid

λογική τιμή

-k

sticky bit

λογική τιμή

-T

αρχείο κειμένου (ευρετικά)

λογική τιμή

-B

δυαδικό αρχείο (ευρετικά)

λογική τιμή

-M

χρόνος τροποποίησης (ηλικία από εκκίνηση σεναρίου, ημέρες)

αριθμός

-A

χρόνος πρόσβασης (ημέρες)

αριθμός

-C

χρόνος αλλαγής inode (ημέρες)

αριθμός

if (-e $file) { ... }                # exists
if (-f $path && -r $path) { ... }    # regular file and readable
my $size = -s $file;                 # size in bytes
if (-d $path) { ... }                # is a directory

Στοιβαγμένοι έλεγχοι αρχείων. Η -f -w -r $file είναι συντομογραφία για (-f $file) && (-w $file) && (-r $file) - η αλυσίδα επαναχρησιμοποιεί τον ίδιο στόχο. Το ψευδο-handle _ (μεμονωμένη κάτω παύλα) επαναχρησιμοποιεί τη cache stat του προηγούμενου ελέγχου αρχείου για αποφυγή επιπλέον κλήσεων συστήματος stat():

if (-f $file && -r _) { ... }        # one stat() call, two checks

Η τελική _ είναι το τυπικό ιδίωμα για οποιαδήποτε αλυσίδα ελέγχων αρχείων στην ίδια διαδρομή.

Δείτε επίσης#

  • Κάθε άλλη σελίδα σε αυτή την αναφορά συνδέεται στις γραμμές αυτού του πίνακα από τη δική της ενότητα Προτεραιότητα. Η διασταυρούμενη αναφορά είναι σκόπιμη - όταν χρειαστεί να συνδυάσετε έναν τελεστή με έναν άλλον, αυτός ο πίνακας είναι η απάντηση.

  • perlfunc index - κάθε όνομα στη λίστα ονομασμένων μοναδιαίων τελεστών τεκμηριώνεται εκεί.