5

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

sub foo(){

my $myvar = "Hello";
} 

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

我尝试使用包和全局变量,但失败了。

Package Bar;
our $bar;

谢谢你。

4

5 回答 5

15

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

{ my $myvar

  sub foo{
    $myvar = "Hello";
  } 

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

不过,这并不是很优雅,而且可能很难维护,因为不清楚在foo1哪里设置了 of 的值$myvar。将变量作为参数传递可能会更好。

sub foo {
    my $myvar = "Hello";
    return $myvar;
}

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

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

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

附带说明一下,sub foo()使用原型

于 2010-06-04T08:10:54.383 回答
6

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

是的你可以:

my $myvar;
sub foo(){
    $myvar = "Hello";
} 

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

这甚至适用于“使用严格;” 和“使用警告;”。

我尝试使用包和全局变量,但失败了。

包变量用于您要在包外导出的变量,而不是您希望在同一包中的两个子例程之间共享的变量。

于 2010-06-04T08:21:04.990 回答
3

只是不要使用my

#!/usr/bin/perl

sub foo() {
  $myvar = "Hello\n";
}

sub foo1() {
  $myvar1 = $myvar;
    print $myvar1;
}

print "here we go!\n";
foo();
foo1();

但是,我不推荐这种编程方式。

于 2010-06-04T07:59:00.683 回答
2

你有几种方法。

最简单的方法是不要用my. 但这需要您避免use strict;,因此不推荐。

您可以在脚本顶部的函数之外声明变量。然后,该变量将可用于下面的所有函数。这是范围的结果:在一组花括号之外声明的变量通常在任何后续花括号内都可用。

use vars qw/$myvar/;您可以使用编译指示声明您的变量。这本质上使您的变量在以下代码中可用。

于 2010-06-04T07:53:18.617 回答
2

以下代码可能会演示您所描述内容的解决方案:

#!/usr/bin/perl
use strict;
my $var = "hello";
sub foo {
    local *var;
    print "$var world\n";
    $var = "hi";
}

sub bar {
    local *var;
    print "$var world\n";
    $var = "hey";
}

foo();
bar();
print "$var world\n";

结果应该是:

hello world
hi world
hey world
于 2011-07-08T13:39:55.390 回答