Operatøren x i Perl

Operatøren x opfører sig forskelligt afhængigt af hvordan den bruges.

I skalar sammenhæng det bruges til at skabe en linje i den ønskede længde af gentagne tegn. Vi kan sige, at denne erklæring gør det "formering" af strenge.

I listen sammenhæng (og hvis venstre operand er skrevet i parentes eller med hjælp qw) han gentager et element med et bestemt antal gange.

Her er et eksempel på, at operatøren x i skalar sammenhæng:

▶ Run
#!/usr/bin/perl

my $str = 'A' x 4;

print $str;

Programmet vil vise en streng, der består af fire tegn 'A': 'AAAA'.

Hvis venstre operand du angive flere tegn, de vil alle blive gentaget:

▶ Run
#!/usr/bin/perl

my $str = 'Abc' x 2;

print $str;

Dette eksempel viser en streng 'AbcAbc'.

Brug en tom streng

I skalar sammenhæng, operatøren x gentager den streng, der er angivet i venstre operand antallet af gange, der er angivet i den højre operand.

Hvis du angiver som den venstre operand er den tomme streng '', i skalar sammenhæng vil resultatet altid være en tom streng, uanset værdien af den højre operand:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $str = '' x 100;

print Dumper $str;

Ved afslutningen af programmet vil det ses, at i $str indeholder en tom streng.

Der er ingen mening at bruge denne operatør i en skalar sammenhæng, er den tomme streng.

Værdien af den højre operand

I skalar sammenhæng, den højre operand in operatøren x fortæller, hvor mange gang du har brug for for at gentage den linje, der indeholder den venstre operand. I tilfældet, hvis operand er et positivt heltal, så det er klart, hvad der sker som følge heraf.

Men tal er ikke kun positiv.

  • Hvis den højre operand er antallet 0, resultatet er altid en tom streng.
  • Hvis den højre operand er et negativt tal, bliver resultatet altid en tom streng.

I tilfælde af at koden er use warnings;, ved hjælp af et negativt tal som en ret operatøren vil der blive vist en advarsel. Her er et eksempel på et script, der viser en string 'Negative repeat count does nothing at script.pl line 5.'.

▶ Run
#!/usr/bin/perl

use warnings;

my $str = 'a' x -3;

print $str;

Hvis den højre operand er et positivt tal med en brøk del dette brøkdelen er simpelthen kasseres. Resultatet 'A' x 2.1 , vil være nøjagtig det samme som resultatet 'A' x 2.99 — line 'AA'.

Liste forbindelse

I listen sammenhæng, operatøren x gentager element. Men udover, at du har brug for en liste sammenhæng, du har brug for også for at imødekomme den venstre operand i parentes. Nedenstående kode vil skabe en række @arr , som indeholder 3 elementer, hvert element er en streng 'a':

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

print Dumper \@arr;

Men hvis du ikke angiver parenteserne i venstre operand, og til at skrive my @arr = 'a' x 3;, array @arrvil være kun ét element, strengen 'aaa'.

Ud over enkle beslag, kan du bruge operatoren qw:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

print Dumper \@arr;

Når du køre denne kode i array @arr vil have 4 elementer, string 'abc', 'def', 'abc', 'def'.

Officiel dokumentation

Her er et uddrag af output perldoc perlop om operatøren 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

Andre artikler