2012-07-16 50 views
-4

我想返回$message_all的正确值,但在给定的情况下它会回到空白状态。有什么建议么?如何从Perl子程序中返回标量值

processing() 

print "message_all = $message_all"; 

sub processing 
{ 
    log (" Some message"); 
} 

sub log 
{ 
    my $text = shift; 
    my $message_all .= $text; 
    return "$message_all"; 
} 
+6

只是对Perl风格的评论:永远不要调用一个子'日志'。有一个预定义的perl子计算*对数*。这可能会增加问题。 – amon 2012-07-16 12:39:44

回答

7

当然它是空白 - 你声明$message_alllog()功能里面,所以它不是它的使用之外。

始终在Perl代码做到这一点:

use strict; 
use warnings; 

它会告诉你,$message_all是未申报。

3

首先您必须在程序开始时总是use strictuse warnings,尤其是当您需要帮助时。

请发布代码,显示您遇到的问题。你的程序甚至不会编译,当你的子程序与核心函数冲突时,程序将不能正常运行。它永远不会显示你描述的问题行为。

您需要收集来自子程序的返回值才能打印出来。类似这样的东西也许

use strict; 
use warnings; 

my $message = processing(); 

print "message = $message"; 

sub processing { 
    mylog (" Some message"); 
} 

sub mylog { 
    my $text = shift; 
    my $message_all .= $text; 
    return $message_all; 
}