Der Betreiber x in Perl

Der Betreiber x verhält sich unterschiedlich, je nachdem wie er verwendet wird.

Im skalarkontext es wird verwendet, um eine Zeichenfolge die richtige Länge aus wiederholte Zeichen. Man kann sagen, dass dieser Operator macht "Multiplikation" für die Zeilen.

In списочном Kontext (und wenn der linke operand aufgezeichnet in Klammern oder mit unter Verwendung des operators qw) er wiederholt das Element eine angegebene Anzahl von Wiederholungen.

Hier ist ein Beispiel für die Arbeit des operators x im skalarkontext:

▶ Run
#!/usr/bin/perl

my $str = 'A' x 4;

print $str;

Das Programm zeigt die Zeile bestehend aus vier Zeichen 'A': 'AAAA'.

Wenn in der linken Operanden mehrere Zeichen angegeben, werden Sie alle wiederholt werden:

▶ Run
#!/usr/bin/perl

my $str = 'Abc' x 2;

print $str;

Dieses Beispiel zeigt eine Zeile 'AbcAbc'.

Verwenden Sie eine leere Zeile

Im skalarkontext Betreiber x Zeile wiederholt, das Sie in der linken Operanden Anzahl mal, die im rechten Operanden angegeben ist.

Wenn Sie als linken Operanden einen leeren String '', das im skalaren Kontext das Ergebnis wird immer eine leere Zeile, unabhängig von der der Rechte operand ist:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $str = '' x 100;

print Dumper $str;

Zum Schluss des Programms wird ersichtlich, dass die $str enthält eine leere Zeichenfolge.

Es gibt keinen Sinn, diese Anweisung im skalarkontext mit einer leeren Zeichenfolge.

Der Rechte operand ist

Im skalarkontext den rechten operand in der x sagt wieviel mal muß wiederholen Sie die Zeile, die enthält in der linken Operanden. Falls ein operand eine positive ganze Zahl, dann ist offensichtlich, was als Folge passiert.

Aber die zahlen sind nicht nur positiv.

  • Falls der Rechte operand ist eine Zahl 0, das Ergebnis ist immer eine leere Zeichenfolge.
  • Wenn der Rechte operand ist eine negative Zahl, dann ist auch das Ergebnis immer eine leere Zeichenfolge.

Falls im Code eine use warnings;, dann ist die Verwendung einer negativen Zahl als rechter der Betreiber wird auf dem Bildschirm angezeigt. Hier ist ein Beispielskript, das zeigt die Zeile 'Negative repeat count does nothing at script.pl line 5.'.

▶ Run
#!/usr/bin/perl

use warnings;

my $str = 'a' x -3;

print $str;

Wenn der Rechte operand ist eine positive Zahl mit Nachkommastellen, ist dieses gebrochene Teil einfach weggelassen. Das Ergebnis 'A' x 2.1 wird genau wie 'A' x 2.99 — Zeile 'AA'.

Spisochnyj den Kontext

In списочном Kontext Operator x Element wiederholt. Aber darüber hinaus braucht spisochnyj den Kontext, müssen noch und platzieren Sie den linken operand in Klammern. Der folgende Code erstellt ein array @arr enthält 3 Elemente, jedes Element ist eine Zeile 'a':

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = ('a') x 3;

print Dumper \@arr;

Aber wenn Sie nicht die Klammern in der linken Operanden und schreiben my @arr = 'a' x 3;, das in einem array @arrwird nur ein Element, String 'aaa'.

Neben der einfachen Klammern können Sie die qw:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = qw(abc def) x 2;

print Dumper \@arr;

Bei der Ausführung dieses Codes in dem array @arr wird 4 Elemente, Zeilen 'abc', 'def', 'abc', 'def'.

Die offizielle Dokumentation

Hier ist ein Ausschnitt der Ausgabe des Befehls perldoc perlop pro Operator x:

Multiplicative Operators

...

    Binary "x" is the repetition operator. In scalar context or if the left
    operand is not enclosed in parentheses, it returns a string consisting of
    the left operand repeated the number of times specified by the right
    operand. In list context, if the left operand is enclosed in parentheses
    or is a list formed by "qw/STRING/", it repeats the list. If the right
    operand is zero or negative (raising a warning on negative), it returns an
    empty string or an empty list, depending on the context.

        print '-' x 80;             # print row of dashes

        print "\t" x ($tab/8), ' ' x ($tab%8);      # tab over

        @ones = (1) x 80;           # a list of 80 1's
        @ones = (5) x @ones;        # set all elements to 5

Andere Artikel