Я не оставлю цель обо очернить Перл. Я люблю Перл.
Просто надо различать список и массив в Перле.
use Perl or die;
#!/usr/bin/perl
use strict;
my $x = ('a', 'b');
print $x;
Вывод:
b
#!/usr/bin/perl
use strict;
my @a = ('a', 'b');
my $x = @a;
print $x;
Вывод:
2
#!/usr/bin/perl
my @a = ('a', 'b');
my ($x) = @a;
print $x;
Вывод:
a
#!/usr/bin/perl
my @a = ('a', 'b');
print scalar @a;
Вывод:
2
#!/usr/bin/perl
print scalar ('a', 'b');
Вывод:
b
#!/usr/bin/perl
$ = "n";
my $x = ('a', 'b', 'c');
print "x = $x";
my $x = @{['a', 'b', 'c']};
print "x = $x";
my $x = (@{['a', 'b', 'c']});
print "x = $x";
Вывод:
x = c
x = 3
x = 3
#!/usr/bin/perl
use strict;
my $x;
my $y;
$y = ($x = ('a', 'b', 'c'));
print "x = $xn";
print "y = $yn";
x = с
y = с
#!/usr/bin/perl
use strict;
my $x;
my $y;
$y = (($x) = ('a', 'b', 'c'));
print "x = $xn";
print "y = $yn";
x = a
y = 3
Я не оставлю цель обо очернить Перл. Я люблю Перл.
use Perl or die;
Подробности здесь: perldoc perldata, читать с «List value constructors»
UPD: Наверное по началу меня не так поняли и стали минусовать, добавил фразу «Я не ставлю цель...»
UPD 2:
Про последний пример. В документации написано
«List assignment in scalar context returns the number of elements
produced by the expression on the right side of the assignment»
то есть если списку что-то присваиваем, то вернётся количество элементов, которые присваиваем списку.
$x = (($foo,$bar) = f());
в $x положится количество элементов, которые возвращает функция f()
Автор: OlegTar