Я просматриваю приведенный ниже код в Интернете, где он пытается добавить два массива. Может кто-нибудь объяснить, что это значит, чтобы получить 14?

my @a = (1,2,5)+(8,9);
print "@a";

output: 14
-3
user2763829 9 Июн 2014 в 11:25

2 ответа

Лучший ответ

На выходе будет 14, так как $a[0] равно 14 => 5+9

Оператор + накладывает скалярный контекст на оба списка, поэтому последние элементы берутся и добавляются,

# in scalar context $x is assigned with last element
my $x = (1,2,5);
print "\$x is $x\n";

Выходы $x is 5

warnings прагма тоже будет жаловаться, намекнув на то, что происходит что-то подозрительное,

Useless use of a constant (8) in void context
4
mpapec 9 Июн 2014 в 09:23

Начиная с:

my @a = (1,2,5)+(8,9);

При использовании списка в контексте scalar возвращается последний элемент. См. What is the difference between a list and an array? для получения подробной информации.

Поэтому два приведенных выше списка сводятся к:

my @a = 5 + 9;

Что математически равно:

my @a = (14);
4
Miller 9 Июн 2014 в 07:38