如果我必须为同一个变量传递两个值,我该怎么办?以下语法有效吗?
sub get_db { return "database_name", "new_database"};
它没有传递值
答案 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"] };