Perl-функция, зная тип получателя - PullRequest
2 голосов
/ 22 июля 2010

У меня есть текстовый файл и функция для извлечения из этого текстового файла:

@thefile = read_file( 'somepathfile' );

Я хотел бы иметь другую реализацию функции read_file в зависимости от того, какой тип получает информацию.

Итак, если я напишу:

%thefile = read_file( 'somepathfile' );

, тогда будет выполнена другая функция.

Как мне это сделать?

Ответы [ 2 ]

12 голосов
/ 22 июля 2010

Хотя ответ Дрегтуна иллюстрирует хорошую технику, я собираюсь рекомендовать ясность.Например:

@thefile = read_file_lines( 'somepathfile' );

%thefile = read_file_pairs( 'somepathfile' );
6 голосов
/ 22 июля 2010

Посмотрите на Want или Contextual::Return CPAN-модули.

Ниже приведен простой пример использования Want:

use strict;
use warnings;
use Want;

sub read_file {
    my $filepath = shift;
    my @file_contents = get_file_contents($filepath);

    return @file_contents if want('LIST');

    return { 
        filepath => $filepath, 
        content  => \@file_contents, 
        lines    => scalar @file_contents 
    } if want('HASH');

    die "Nothing for that context!";
}

my @list = read_file('foo');
my %hash = %{ read_file('foo') };

NB. Разыменование хеша необходимо для принудительного возврата контекста.

/ I3az /

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