我有一个子程序(在Perl中)需要调用另一个传递其参数并添加字符串的子程序。我尝试过类似的东西(但我正在寻找答案,而不只是纠正这个......):
sub TestBase($)
{
print @_;
return 'hard processed string';
}
sub Test($)
{
print @_;
return TestBase(@_, 'Filename.txt');
}
这个失败了“主要:: TestBase的参数太多”(这些年来我仍然使用cmd.com,在这种情况下没有简单的复制粘贴!)。
答案 0 :(得分:4)
Perl最佳实践:don't define function prototypes除非你真的知道自己在做什么。
#!/usr/bin/perl -w
use strict;
sub test_base {
print @_;
}
sub test {
print @_;
return test_base(@_, 'Filename.txt');
}
test('foo', 'bar');
答案 1 :(得分:1)
为了澄清和总结我对Dan的答案的更正,这就是你的代码应该是什么样的。
我删除了子程序原型,将开括号放在与子程序名称相同的行上(由perldoc perlstyle
首选),将名称更改为小写(大写通常为全局变量保留)例如包名称),并删除了return
关键字。
请注意,您可能最好保留子例程名称,特别是如果其他人正在编写依赖于它们的代码。遵循公认的做法很重要,但不如保持现有代码库的接口静态重要。
#!/usr/bin/perl
use strict;
use warnings;
sub test_base {
print @_;
'hard processed string';
}
sub test {
print @_;
test_base(@_, 'Filename.txt');
}
my $retval = test('A', 'B', 'C');
print "\n\n", $retval, "\n";
<强>输出强>
ABCABCFilename.txt
hard processed string