Perl:通过配置文件传递两个参数

时间:2016-04-29 02:39:14

标签: perl

如果我必须为同一个变量传递两个值,我该怎么办?以下语法有效吗?

sub get_db { return "database_name", "new_database"};

它没有传递值

2 个答案:

答案 0 :(得分:3)

从sub返回多个值的最简单方法是列表:(注意 - 以下代码均未经过测试)

return ($db_name, $new_db, $table, $rows)
...
my ($database_name, $database, $table_name, $entry_count) = get_db();

但这很容易搞砸 - 如果你在返回和收到的东西之间有一个不匹配的东西,那么一些东西就会变得不合适。同样,如果返回值的顺序错误,您将引入一个微妙的错误。

稍微好一点就是返回hashref;

....
my $return_values = { NAME => $db_name ,  DB => $new_db , TABLE => $table } ;
# add the number of rows and return it
$return_values->{ COUNT } = $rows ;
return $return_values ;
...
...
my $db_stuff = get_db();
for my $i (1 .. $db_stuff->{COUNT}) {
    ...

再好的是学习一点OO并返回一个对象。 Moo是众多选项中的一种 - 它看起来像这样:

Package DBstuff;

has name,  is => ro ;
has db,    is => ro ;
has table, is => ro ;
has count, is => rw ;

1;

... in another file ...

my $db_stuff = DBstuff->new(
                  name => $name ,
                    db => $db   ,
                 table => $table,
               );
# Add rows and return
$db_stuff->count( $rows );
return $db_stuff ;
...
...
my $db_data = get_db();
for my $i (1 .. $db_data->count) {
    ...

还有一个名为Object :: Result的模块几乎肯定会有些过分,但无论你是否使用它,我都想推荐该模块的RATIONAL section文档。涵盖了从更深入的方式返回几个东西的问题。

答案 1 :(得分:0)

Perl允许返回具有多个值的数组,例如

sub get_db { return ["database_name", "new_database"] };