如何将子程序变量值转移到另一个子程序变量中,我可以使用全局变量吗?
sub foo(){
my $myvar = "Hello";
}
sub foo1(){
my $myvar1 = $myvar; # how can I get the "Hello" from $myvar.
}
我尝试使用包和全局变量,但失败了。
Package Bar;
our $bar;
谢谢你。
如何将子程序变量值转移到另一个子程序变量中,我可以使用全局变量吗?
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
哪里设置了 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()
使用原型(
如何将子程序变量值转移到另一个子程序变量中,我可以使用全局变量吗?
是的你可以:
my $myvar;
sub foo(){
$myvar = "Hello";
}
sub foo1(){
my $myvar1 = $myvar; # how can I get the "Hello" from $myvar.
}
这甚至适用于“使用严格;” 和“使用警告;”。
我尝试使用包和全局变量,但失败了。
包变量用于您要在包外导出的变量,而不是您希望在同一包中的两个子例程之间共享的变量。
只是不要使用my
:
#!/usr/bin/perl
sub foo() {
$myvar = "Hello\n";
}
sub foo1() {
$myvar1 = $myvar;
print $myvar1;
}
print "here we go!\n";
foo();
foo1();
但是,我不推荐这种编程方式。
你有几种方法。
最简单的方法是不要用my
. 但这需要您避免use strict;
,因此不推荐。
您可以在脚本顶部的函数之外声明变量。然后,该变量将可用于下面的所有函数。这是范围的结果:在一组花括号之外声明的变量通常在任何后续花括号内都可用。
use vars qw/$myvar/;
您可以使用编译指示声明您的变量。这本质上使您的变量在以下代码中可用。
以下代码可能会演示您所描述内容的解决方案:
#!/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