Как я могу вернуть хеш или массив из подпрограммы, в зависимости от того, чего хочет пользователь?Необязательно возвращать массив или хэш из подпрограммы?
В принципе, я хочу подпрограмму, когда при запросе вернуть хэш она вернет хэш, но когда его попросят вернуть массив, он вернет массив, содержащий ключи от этого хэша.
например:
my %hash = foo();
my @array = foo(); # @array contains "keys %hash"
# pseudo code
sub foo {
# Define a hash
my %hash = (
'key1' => 'val1',
'key2' => 'val2',
'key3' => 'val3',
);
# I know this is not valid Perl code, but it represents what I want.
return keys %hash if wantarray;
return %hash if wanthash;
}
Я знаю, что вы можете использовать wantarray
, чтобы определить, хотите ли вы массив или скаляр должен быть возвращен, но мне нужно схожую функциональность для необязательно возвращая массив или хэш.
В Perl нет такой вещи, как «массив контекста», я думаю: это либо _list_, либо скалярный, либо пустой контекст. Зачем вам такая функциональность? – raina77ow
Возможно, модуль [Want] (http://search.cpan.org/~robin/Want-0.26/Want.pm) будет интересен для вас. – raina77ow
всегда возвращает \% хеш и позволяет вызывающему пользователю 'my @array = keys% {foo()}' или 'my% hash =% {foo()}' (или еще лучше, просто 'my $ hasherf = foo() ') – ysth