从子程序调用子程序

时间:2014-02-27 09:11:39

标签: perl subroutine

我有一个子程序(在Perl中)需要调用另一个传递其参数并添加字符串的子程序。我尝试过类似的东西(但我正在寻找答案,而不只是纠正这个......):

sub TestBase($)
{
    print @_;
    return 'hard processed string';
}

sub Test($)
{
    print @_;
    return TestBase(@_, 'Filename.txt');
}

这个失败了“主要:: TestBase的参数太多”(这些年来我仍然使用cmd.com,在这种情况下没有简单的复制粘贴!)。

2 个答案:

答案 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