In 变量§
查看主要文档 在上下文中 了解my 声明符
使用 my
声明变量会赋予其词法作用域。这意味着它仅在当前块中存在。例如
say ; # Exception! "Variable '$foo' is not declared"
这会引发错误,因为 $foo
仅在我们处于相同作用域时才会被定义。
为了在同一语句中创建多个具有词法作用域的变量,请用括号括住这些变量
my ( , );
另请参阅 声明具有词法或包作用域的变量列表。
此外,词法作用域意味着变量可以在新作用域中暂时重新定义
my = "outside";sub outer-locationouter-location; # OUTPUT: «outside»sub in-buildingin-building; # OUTPUT: «inside»outer-location; # OUTPUT: «outside»
如果已重新定义变量,则引用外部变量的任何代码将继续引用外部变量。因此,此处 &outer-location
仍会打印外部 $location
sub new-locationnew-location; # OUTPUT: «outside»
要使 new-location()
打印 nowhere
,请使用 the * twigil 将 $location
设为动态变量。在尝试本地作用域后,此 twigil 会在调用作用域中查找符号,而不是在外部作用域中查找符号。
my
是子例程的默认作用域,因此 my sub x() {}
和 sub x() {}
执行完全相同的操作。