如何从Perl子例程返回标量值

时间:2012-07-16 12:32:24

标签: perl

我想返回$message_all的正确值,但在给定方案中它会变回空白。有什么建议吗?

processing()

print "message_all = $message_all";

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

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

2 个答案:

答案 0 :(得分:7)

当然它是空白的 - 你在$message_all函数中声明了log(),所以它在它之外是不可用的。

始终在您的Perl代码中执行此操作:

use strict;
use warnings;

它会告诉你$message_all未声明。

答案 1 :(得分:3)

首先,您必须在程序开始时始终 use strictuse warnings,尤其是在您寻求帮助时。

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

您需要收集子程序中的返回值才能打印它。这样的事可能

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;
}