Как заставить список или скалярный контекст в Perl? - PullRequest
3 голосов
/ 13 мая 2011

Я немного озадачен некоторыми деталями списка и скалярных контекстов в Perl, и я надеюсь, что кто-нибудь может мне помочь.Моя конечная цель - сравнить количество элементов в двух массивах, за исключением того, что один из массивов является анонимным массивом, и я не могу понять, как Perl скажет мне, сколько у него элементов.Вот что я набрал в отладчике: `

DB<10> @a = ([1,2,3,4],[5,6,7,8,9],[10,11])

DB<11> @b = $a[1]

DB<12> $c = @b

DB<13> p $c
1             # Why didn't this print out 5?

DB<14> $d = $a[1]

DB<15> p @$d
56789

DB<16> p $$d
Not a SCALAR reference at (eval 17)[/opt/local/lib/perl5/5.8.9/perl5db.pl:638] line 2.

DB<17> @e = @a[1]

DB<18> p @e
ARRAY(0x87c358)

DB<19> p ${@e}

Я выбрал комбинацию забавных персонажей, может кто-нибудь сказать мне, что я делаю неправильно?Спасибо.

1 Ответ

11 голосов
/ 13 мая 2011

[] создаст ссылку на массив (который является скаляром).

$a[1] указывает на [5,6,7,8,9] (ссылка на массив)

@b = $a[1] создаст новый массив с одним элементом (ссылка на массив).

Вам нужно разыменовать arrayref.

@b = @{$a[1]}

В какой момент вы можете получить количество предметов в нем:

print scalar @b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...