Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中,如何将变量从一个函数传递到另一个函数_Perl_Function_Scope - Fatal编程技术网

在perl中,如何将变量从一个函数传递到另一个函数

在perl中,如何将变量从一个函数传递到另一个函数,perl,function,scope,Perl,Function,Scope,我正在初始化一个函数中的变量,并希望将此变量传递到另一个函数中。此变量保存一个char值。 我尝试过传入引用和取消引用,在函数外部声明变量,并使用局部变量 我还查看了perlmonks、perl示例、谷歌搜索和本网站查找解决方案,但没有结果。我刚刚开始使用perl编程,因此非常感谢您的帮助 听起来你需要阅读一些文档,而不仅仅是谷歌搜索。我建议http://www.perl.org/books/beginning-perl/ use strict; use warnings; sub foo {

我正在初始化一个函数中的变量,并希望将此变量传递到另一个函数中。此变量保存一个char值。 我尝试过传入引用和取消引用,在函数外部声明变量,并使用局部变量


我还查看了perlmonks、perl示例、谷歌搜索和本网站查找解决方案,但没有结果。我刚刚开始使用perl编程,因此非常感谢您的帮助

听起来你需要阅读一些文档,而不仅仅是谷歌搜索。我建议
http://www.perl.org/books/beginning-perl/

use strict;
use warnings;

sub foo {
    my $char = 'A';

    bar($char);
}

sub bar {
    my ($bar_char) = @_;

    print "bar got char $bar_char\n";
}

foo();

如果通过引用传递参数(见下文),则第一个函数可以修改该参数,然后可以将其传递给另一个函数:

    #!/usr/bin/perl

sub f {
  $c = shift;
  $$c='m';
}

$c='a';
f(\$c);
print $c;

这将打印“m”

您的第一个函数无法返回此变量有什么原因吗

my $config_variable = function1( $param1 );
function2 ( $config_variable, $param2 );
您还可以传回多个变量:

my ( $config_variable, $value ) = function1( $param1 );
my $value2  = function2( $param1, $config_variable );
这是最好的办法。但是,您可以使用全局定义的变量,并且可以在函数之间使用这些变量:

#! /usr/bin/env perl
#
use strict;
use warnings;

my $value;

func1();
func2();

sub func1 {
    $value = "foo";
}

sub func2 {
    print "Value = $value\n";
}
注意,我在两个函数之外声明了
$value
,因此它在整个文件中是全局的,甚至在子例程中也是如此。现在,
func1
可以设置它,并且
func1
可以打印它

这方面的专业术语是:一个可怕的、可怕的、邪恶的想法,你应该永远不要想去做它

这是因为您认为某个特定变量突然被设置为一个值,并且在没有任何原因的情况下神秘地更改值。对一个变量这样做已经够糟糕的了,但如果你把它当作拐杖,你最终会得到几十个无法在程序中跟踪的变量


如果你发现自己经常这样做,你可能需要重新考虑你的代码逻辑。

一些代码和
不起作用的部分
描述会很有帮助。他说的是在一个函数内初始化一个var,然后传递给另一个函数$a=0;初始费用(a美元);使用($a)。这就是我对qs的理解。@OlegGryb如果没有任何代码显示尝试了什么,很难说。你是对的,没有足够的信息,但这是我的理解。