O operador . em Perl

O operador de ponto usado em Perl para a concatenação (junção) de linhas.

Exemplo:

▶ Run
#!/usr/bin/perl

print 'ABC' . 'DEF';

O programa exibirá a linha 'ABCDEF'.

Neste exemplo, o operador de ponto aplica-se a duas linhas escritas no código do programa (tais linhas são chamadas de "literais de seqüência de caracteres").

Normalmente, como operandos de um operador de ponto de . são literais de seqüência de caracteres, variáveis escalares ou resultados do trabalho de outras funções.

Strings e números

O operador . sempre trabalha com seus argumentos como com cadeias de caracteres. O resultado desses quatro operações um e o mesmo — linha '11'.

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

E isso é bom. Você pode perfeitamente sem problemas concatenar ao número de linhas e o resultado será exatamente como você espera.

O uso de uma matriz como um operando

Aqui está um exemplo de um programa em que a matriz конкатенируется com strings usando o operador .:

▶ Run
#!/usr/bin/perl

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

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

O programa exibirá a linha 'A3B'.

'A' . @arr . 'B' é a mesma coisa que 'A' . scalar(@arr) . 'B'.

Quando se utiliza a matriz com o operador ponto de . a matriz utilizada no скалярном contexto, e a matriz de em скалярном contexto retorna o número de elementos do array.

O uso de hash como operando

Aqui está um exemplo de um programa em que o hash конкатенируется com strings usando o operador .:

▶ Run
#!/usr/bin/perl

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

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

Dependendo da versão do Perl, o programa exibirá uma seqüência de caracteres de um tipo 'A2/8B', uma seqüência de caracteres 'A2B'.

'A' . %h . 'B' é a mesma coisa que 'A' . scalar(%h) . 'B'.

Exatamente como no caso da matriz, quando você usa o hash com o operador ponto de . hash será usado em скалярном contexto.

A partir da versão Perl 5.26 de hash na скалярном contexto retorna o número de pares de elementos neste хеше. Na versão de Perl até 5.26 de hash na скалярном contexto retorna informações sobre o dispositivo interno de hash.

O uso de links para сабу como operando

Aqui está um exemplo de um programa em que o link para сабу конкатенируется com strings usando o operador .:

▶ Run
#!/usr/bin/perl

my $sub = sub {
   return 42;
};

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

Perl para a versão 5.22 apresenta a tela algo como ACODE(0x1452f00)B, a partir 5.22 na tela será aproximadamente a mesma linha, só haverá mais dígitos após o 0x: ACODE(0x561e87413ed8)B.

Diferentes execuções do programa vai mostrar números diferentes.

'A' . $sub . 'B' é a mesma coisa que 'A' . scalar($sub) . 'B'. Quando você usa em скалярном contexto anônima saba retorna uma cadeia de caracteres tipo CODE(0x10dbf00) (informações sobre onde na memória está o código da sava, o conhecimento necessário para que muito raramente).

O caractere de sublinhado _

Para a concatenação de strings em Perl usa o operador de ponto de .. Operador de sublinhado _ em Perl não. Mas o operador _ há popular Perl biblioteca de Template::Toolkit e na biblioteca, ele é usado para concatenação de strings.

utf8 bandeira

No caso em que a concatenação de participar de pelo menos uma linha com um sinalizador interno, o que significa que o conteúdo está em codificação utf8, então a resultante de comandos essa bandeira também. Aqui está um exemplo de código, o que confirma esse comportamento:

▶ 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

Temas relacionados

Outros artigos