Perl函数知道接收器类型

时间:2010-07-22 11:08:17

标签: perl function

我有一个文本文件,还有一个从该文本文件中检索的函数:

@thefile = read_file( 'somepathfile' );

我希望read_file函数有不同的实现,具体取决于接收信息的类型。

所以,如果我写:

%thefile = read_file( 'somepathfile' );

然后将执行不同的功能。

我该怎么做?

2 个答案:

答案 0 :(得分:12)

虽然draegtun's answer说明了一种很好的技巧,但我将建议清晰度。例如:

@thefile = read_file_lines( 'somepathfile' );

%thefile = read_file_pairs( 'somepathfile' );

答案 1 :(得分:6)

查看WantContextual::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 /