2016-02-12 3 views
0

Я пытаюсь вернуть анонимный массив из подпрограммы, однако при сбросе возвращаемой переменной я вижу только одно значение (я ожидаю два).Perl: возвращает анонимный массив из подпрограммы

Вот мой код:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my $fruits_ref = generate_fruits(); 
print "Fruits: " . Dumper($fruits_ref) . "\n"; 

sub generate_fruits 
{ 
    return ("Apple", "Orange"); 
} 

Этот выход:

Fruits: $VAR1 = 'Orange'; 

Как получить подпрограммой вернуть этот массив реф?

+1

Вы не возвращает массив, вы возвращающая список. Массив: '[" Apple "," Orange "]' – Arkadiy

+0

Возможно ли вернуть весь список? Как я могу распаковать список? –

+0

'$ fruits_ref = [generate_fruits()]' – Sean

ответ

1

Вы не возвращаете массив (или ссылку на массив), вы возвращаете список. Ссылка на анонимный массив - ["Apple", "Orange"]

Список становится его последним элементом, когда вы передаете его в скалярный контекст. Для того, чтобы перейти к списку контекста, вы могли бы сделать

my @fruits = generate_fruits(); 

Но это, вероятно, не то, что вам нужно - вы, кажется, нужна ссылка. Для этого просто используйте квадратные скобки.

О, еще одна альтернатива

my $fruits_ref = [generate_fruits()]; 
+0

Nit: '[" Apple "," Orange "]' - _not_ массив; это ссылка на анонимный массив. Массив будет '@array = (« Apple »,« Orange »)'. –

+0

@MattJacob Спасибо, отредактирован – Arkadiy

7

Анонимные массивы построены с квадратными скобками.

return [ 'Apple', 'Orange' ] 
Смежные вопросы