Operator . w Perl

Operator punkt jest używany w Perlu dla konkatenacji (łączenia) wierszy.

Przykład:

▶ Run
#!/usr/bin/perl

print 'ABC' . 'DEF';

Program wypisze na ekran ciąg 'ABCDEF'.

W tym przykładzie operator punkt ma zastosowanie do dwóch wierszy napisanych w kodzie programu (takie wiersze są nazywane "literały ciągów znaków").

Zazwyczaj jako operand operatora punkt . są literały ciągów znaków, zmienne skalarne lub wyniki innych funkcji.

Wiersze i liczby

Operator . zawsze działa ze swoimi argumentami jak z wierszami. Wynik tych wszystkich czterech operacji będzie jeden i ten sam — wiersz '11'.

  • 1 . 1
  • 1 . '1'
  • '1' . 1
  • '1' . '1'

I to jest w porządku. Można zupełnie bez problemów конкатенировать liczby do wierszy — i wynik będzie dokładnie taki, jak oczekujemy.

Użytkowania tablicy jako operandy

Oto przykład programu, w którym tablica конкатенируется z wierszami za pomocą operatora .:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print 'A' . @arr . 'B';

Program wypisze na ekran ciąg 'A3B'.

'A' . @arr . 'B' to to samo co 'A' . scalar(@arr) . 'B'.

Przy użyciu tablicy z operatorem punkt . tablica jest używana w скалярном kontekście, a tablica w скалярном kontekście zwraca ilość elementów w tablicy.

Wykorzystanie mieszania jako operandy

Oto przykład programu, w którym hash конкатенируется z wierszami za pomocą operatora .:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 'one',
    b => 'two',
);

print 'A' . %h . 'B';

W zależności od wersji Perl program wypisze na ekran albo wiersz rodzaju 'A2/8B'albo ciąg 'A2B'.

'A' . %h . 'B' to to samo co 'A' . scalar(%h) . 'B'.

Dokładnie tak samo jak w przypadku tablicy, przy użyciu mieszania z operatorem punkt . hash będzie stosowany w скалярном kontekście.

Począwszy od wersji Perl 5.26 hash w скалярном kontekście zwraca liczbę par elementów w tym хеше. A w wersji Perl do 5.26 hash w скалярном kontekście zwraca informacje o wewnętrzne urządzenie mieszania.

Korzystanie z łącza na sabu jako operandy

Oto przykład programu, w którym jest link do sabu конкатенируется z wierszami za pomocą operatora .:

▶ Run
#!/usr/bin/perl

my $sub = sub {
   return 42;
};

print 'A' . $sub . 'B';

Perl do wersji 5.22 wyświetla coś takiego ACODE(0x1452f00)B, począwszy od 5.22 na ekranie będzie w przybliżeniu taka sama linia, tylko tam będzie więcej cyfr po 0x: ACODE(0x561e87413ed8)B.

Różne uruchomienia programu będą pokazywać różne liczby.

'A' . $sub . 'B' to to samo, co 'A' . scalar($sub) . 'B'. Podczas korzystania z w скалярном kontekście anonimowe saba zwraca ciąg znaków rodzaju CODE(0x10dbf00) (informacja o tym gdzie w pamięci znajduje się kod tej saby, wiedza o tym trzeba się bardzo rzadko).

Znak podkreślenia _

Dla konkatenacji ciągów w Perl używa operator punkt .. Operatora podkreślenie _ w Perlu nie ma. Ale operator _ jest w popularnej Perl bibliotece Template::Toolkit i w tej bibliotece jest on używany do konkatenacji.

utf8 flaga

W przypadku, gdy w konkatenacji bierze udział przynajmniej jeden wiersz, który ma wewnętrzny flaga, oznacza, że zawartość jest w kodowaniu utf8, to wyniku wiersze taka flaga też będzie. Oto przykład kodu, który potwierdza to zachowanie:

▶ Run
#!/usr/bin/perl

use utf8;

my $str_with_flag = 'раз-два-три';

my $str_without_flag = 'one-two-three';

print utf8::is_utf8($str_with_flag) . "\n"; # prints 1
print utf8::is_utf8($str_without_flag) . "\n"; # prints empty string

print utf8::is_utf8($str_with_flag . $str_without_flag) . "\n"; # prints 1
print utf8::is_utf8($str_without_flag . $str_with_flag) . "\n"; # prints 1

Tematy pokrewne

Inne artykuły