>什么是本地范围?
我读的是 – >本地复制全局变量的值,更改值,用户将使用它和外部块将保留全局值
混乱 – >我做同样的事情只有受益我看到,一些变量,如$package :: var不能用我的范围声明,但可以使用本地范围声明.当地还有什么
什么是“全局”变量?
什么是 – >其范围在包装内.基本上我们将全局变量放在@EXPORT数组中,并使用它或附加命名空间来在其他包中使用.
怀疑 – >再次,如果我们使用我的范围声明变量,那么我们可以访问整个包中的变量.是对的吗?是否可以在@EXPORT数组中添加我的作用域变量,并在另一个包中使用它?
这个问题可能看起来像重复,但我很困惑
解决方法
词汇变量是词法范围的,这意味着它们只能在当前的词汇范围内可见.
>包变量是全局范围的,这意味着它们可以被解释器中的所有代码看到.
以下是创建变量的方法.
>我创建一个词汇变量.
>我们创建一个词典变量,该变量在当前包中的别名的变量中被别名.换句话说,我们的$foo;与alias my $foo = $The :: Current :: Package :: foo ;.
>全局变量在使用时创建.
本地不创建任何变量.它只是备份一个变量,直到当前的词法范围被破坏.
my
does the same thing.
不,本地不改变变量的范围.虽然词法变量仅在词法范围内可见,但整个翻译器仍然可以看到本地化的全局变量.
$x = 123; sub foo { print "$x\n"; } { local $x = 456; foo(); } # 456 foo(); # 123
$x = 123; sub foo { print "$x\n"; } { my $x = 456; foo(); } # 123 foo(); # 123
What else for
local
本地主要用于近似我的变量的功能,无法以其他方式声明词法.
(从历史上看,这是所有的变量,自5.6以来,只有标点符号变量不能被声明为词法.
What is “global” variable?
可以在全球范围内看到的变量,即解释器中的任何代码.
Is it possible to add the my scoped variables in @EXPORT array and use it in another packages?
出口商使用的是@EXPORT.出口商将无法找到除全局符号之外的任何东西(因为文件是以新的词汇作用域编译的),所以@EXPORT必须只包含全局符号.