在子程序之外调用子程序中定义的变量

我有一个子程序,它取 $x 的值并给出 $a 的值。但是,我无法在子例程之外访问 $a 的值,因为它告诉我 $a 未定义。我昨天才了解了子程序,所以我认为我遗漏了一些关于它们的东西。

sub rout {
  if(@_ == 1) {
    my $a = 3;
  } else {
    my $a = 5;
  }
}

my $x = 1;
rout($x);
print $a;

回答

首先,不要使用$aand $b。它们有点特殊,因为它们被sort.


其次,@_ == 1检查调用者提供的参数数量。这可能不是您想要检查的。您可能想检查第一个参数的值:$_[0] == 1


问题是您正在创建一个新的词法作用域变量,为其分配一个值,然后立即离开该作用域。您的变量一创建就被销毁!在需要的最外层范围内声明一个变量。

my $y;

sub rout {
  my ($x) = @_;
  if ($x == 1) {
    $y = 3;
  } else {
    $y = 5;
  }
}

my $x = 1;
rout($x);
print "$yn";

也就是说,在这里返回一个值会更有意义。

sub rout {
  my ($x) = @_;
  if ($x == 1) {
    return 3;
  } else {
    return 5;
  }
}

my $x = 1;
my $y = rout($x);
print "$yn";


以上是在子程序之外调用子程序中定义的变量的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>