Perl 子程序(函数):子程序返回值
在 Perl 中,子程序(函数)可以返回一个标量值、列表或者一个哈希,具体取决于子程序内部的实现和上下文中如何接收返回值。让我们来看一下如何定义和使用子程序来返回不同类型的值。
返回标量值
要返回一个标量值,你可以简单地在 return
语句中指定该值。如果没有明确使用 return
,则子程序会返回最后一个求值的表达式的结果。
sub add {
my ($a, $b) = @_;
return $a + $b;
}
my $sum = add(2, 3);
print "Sum is $sum\n"; # 输出: Sum is 5
返回列表
通过返回一个数组,你可以让子程序返回多个值。你可以直接返回一个数组或一个列表。
sub get_names {
return ('Alice', 'Bob', 'Charlie');
}
my @names = get_names();
print "Names are: @names\n"; # 输出: Names are: Alice Bob Charlie
返回哈希
类似于返回数组,你也可以返回一个哈希。
sub get_person {
my %person = (
name => 'Alice',
age => 30,
);
return %person;
}
my %person_info = get_person();
print "Name: $person_info{name}, Age: $person_info{age}\n"; # 输出: Name: Alice, Age: 30
用列表上下文接收
Perl 子程序返回值应注意上下文,具体来说,可以通过数组和标量的方式来接收返回值,即列表上下文和标量上下文。
sub get_values {
return (1, 2, 3, 4);
}
my @list = get_values(); # 列表上下文
my $count = scalar get_values(); # 标量上下文,返回4,因为是返回列表的元素个数
print "List: @list\n"; # 输出: List: 1 2 3 4
print "Count: $count\n"; # 输出: Count: 4
注意事项
- 使用
return
时,如果没有指定返回值,Perl 会默认返回undef
。 - 在列表上下文中,最后一个表达式的值为列表会被返回,而在标量上下文中仅返回最后一个元素。
- 使用
wantarray
可以区分调用上下文,wantarray
返回true
表示列表上下文,返回false
表示标量上下文,返回undef
表示 void 上下文。
这些基本概念使 Perl 子程序非常灵活,可以根据不同的需求返回不同类型的数据。