【问题标题】:Return statement in perlperl 中的返回语句
【发布时间】:2014-10-01 18:30:09
【问题描述】:

ss1.我是 Perl 新手,我有一个简单的问题。我有一个 if else 语句。

if ( $response->is_success ) {
    do something;
} else {
    my @vals = foo();

    sub foo {
        return
            "Total closed cases:0",
            "Total pending cases:0",
            "Total resolved cases:0",
            "Total assigned cases:0";
    }
}

我知道不可能给出一个以上的返回语句,但响应包含所有 4 个案例计数的计数。因此,如果它没有找到 4 个案例计数中的任何一个,它应该说 eg.total closed case: 0" 或解决的案例总数:0 等等。所以这就是为什么要给出 return 语句。我如何在一个 return 语句中给出所有 4 个语句,或者我是否应该再次使用 else if 来获得我的结果。(我试过了,它抛出错误)。非常感谢任何帮助。

谢谢

【问题讨论】:

  • 另一件要考虑的事情,我注意到您在 if/else 语句中声明了一个子例程。在 Perl 中,即使您在 if 语句或另一个子例程中声明了一个子例程,它在定义它的 if 语句或子例程之外仍然可见。这可能会导致不可预测的结果,因此不鼓励这样做。词法作用域的子程序在 Perl 中仍处于试验阶段:perldoc.perl.org/perlsub.html#Lexical-Subroutines

标签: perl return-value


【解决方案1】:

您可能会感到惊讶,但 Perl 实际上允许您从一个子例程返回多个变量!

详情见链接: http://perlmeme.org/faqs/perl_thinking/returning.html

然而,在这种情况下我会做的是为输出创建一个哈希

sub foo {
    my %cases = ();

    $cases{closed} = 0;
    $cases{pending} = 0;
    $cases{resolved} = 0;
    $cases{assigned} = 0;

    return %cases;
}

# accessing cases outside of the subroutine
my %hash = foo();

print "CLOSED  : $hash{closed}\n";
print "PENDING : $hash{pending}\n";
print "RESOLVED: $hash{resolved}\n";
print "ASSIGNED: $hash{assigned}\n";

输出将如下所示:

CLOSED  : 0
PENDING : 0
RESOLVED: 0
ASSIGNED: 0

哈希非常适合按名称存储多个值并在以后查找它们,它们在函数之间传递大量数据时非常有用。

关于哈希的详细信息: http://www.cs.mcgill.ca/~abatko/computers/programming/perl/howto/hash/

如果您有一个不希望占用大量内存的大型数据结构,您也可以通过引用传递哈希,但我建议在学习如何通过引用传递哈希之前先学习如何使用哈希。

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2013-04-28
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多