【发布时间】:2016-02-24 19:53:00
【问题描述】:
我不得不为我的工作编辑一些 Perl 脚本。我从来没有写过一行 Perl,但我可以让我的东西正常工作,直到我遇到了一个奇怪的问题。考虑以下函数
sub trim {
my $s = shift;
$s =~ s/^\s+|\s+$//g;
return $s
}
有以下两种调用方式:
my $previousVersionHash = readline( *CONFIG );
$previousVersionHash = trim($previousVersionHash);
$maxClients = readline( *CONFIG );
和
my $previousVersionHash = trim(readline( *CONFIG ));
$maxClients = readline( *CONFIG );
在第一种情况下,它工作正常,但使用第二个 sn-p 我收到警告,$maxClients 是空的,而不是包含 CONFIG 文件的第二行。
为什么会有这种奇怪的行为?请注意,这也发生在我使用sub trim($) 时。顺便说一句,我不知道这两个声明之间的区别,但这是记录在案的,所以我可以看看它是否对这个问题很重要。
【问题讨论】:
-
如果你说
sub trim($),问题应该不会发生。也就是说,学习处理为其 args 提供列表上下文的子调用会比弄乱原型更好,因此首选trim(scalar readline...)。 -
如果测试这个对我来说不是那么痛苦,我会尝试添加回参数列表
标签: perl