perl - Perl中的全局变量、子程序变量问题

标签 perl global-variables subroutine

如何将子程序变量值转移到另一个子程序变量中,我可以使用全局变量吗?

sub foo(){

my $myvar = "Hello";
} 

sub foo1(){
my $myvar1 = $myvar;   # how can I get the "Hello" from $myvar.
}

我尝试使用包和全局变量,但失败了。
Package Bar;
our $bar;

谢谢你。

最佳答案

您可以在包含 2 个函数的范围内声明变量:

{ my $myvar

  sub foo{
    $myvar = "Hello";
  } 

  sub foo1{
    my $myvar1 = $myvar;   
  }
}

虽然这不是很优雅,而且很难维护,因为在 foo1 中并不清楚。其中 $myvar 的值已设置。将变量作为参数传递可能会更好。
sub foo {
    my $myvar = "Hello";
    return $myvar;
}

sub foo1 {
  my( $myvar)= @_;
  my $myvar1 = $myvar;
}

# calling code
my $myvar= foo();
foo1( $myvar);

请注意,所有 3 $myvar是不同的变量,在不同的范围内。

附带说明一下,使用原型(prototype)(sub foo())可能不是一个好主意,除非你真的知道他们在做什么,但情况可能并非如此(见 The problem with prototypes 对原型(prototype)的讨论)

关于perl - Perl中的全局变量、子程序变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2972310/

相关文章:

linux - HTTP::Daemon 和调试错误代码

python - 在 Python 中的文件之间共享全局变量的最佳方式

function - ARM 汇编语言中的两个函数/子例程

perl - 将子例程传递给 Perl 子例程

php - PHP 中的全局变量与静态变量

regex - 查找子程序的最后一个 "}"

perl - 使用 perl 的长度和编码

perl - 获取权限被拒绝运行 perl 可执行文件

perl - 我可以强制 LWP::UserAgent 接受过期的 SSL 证书吗?

c++ - 实现程序配置设置的好方法是什么?