加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中,local()可以创建一个变量吗?

发布时间:2020-12-15 21:51:46 所属栏目:大数据 来源:网络整理
导读:我在Stackoverflow和Google中读过许多帖子,告诉我 local 不会创建变量,而是在现有变量上运行. 我在下面有一小段代码,我想知道当没有创建这样的变量时本地是如何工作的. #use strict;#use warnings;func;sub func{ local $temp = 20; print $temp; } 我写这篇
我在Stackoverflow和Google中读过许多帖子,告诉我 local不会创建变量,而是在现有变量上运行.

我在下面有一小段代码,我想知道当没有创建这样的变量时本地是如何工作的.

#use strict;
#use warnings;

&func;

sub func{
    local $temp = 20;
    print $temp;        
}

我写这篇文章只是为了理解这个概念而且我对Perl来说相对较新.

解决方法

除非您使用my声明变量,否则没有完整包规范的变量将进入当前包.以下是您第一次看到变量的用法以及它们的用途:
my $temp;       # a scoped,lexical variable that does not live in any package
state $temp;    # a persistent lexical variable
our $temp;      # a package variable in the current package,declared
$temp;          # a package variable in the current package
$main::temp     # a package variable in main
$Foo::Bar::temp # a package variable in Foo::Bar
local $temp     # a package variable in the current package,with a dynamically-scoped (temporary) value

local设置包变量的范围.声明此“动态”作用域时,Perl使用您设置的临时值,直到作用域结束.与其他包变量一样,Perl在您第一次使用它们时会创建它们.您可以先在本地使用它,但不会影响它.

许多试图回答你问题的人立刻唠叨你严厉.这是一个编程辅助工具,它可以帮助您通过强制声明要使用的所有变量来错误输入变量名.当您使用未声明的变量名时,它会停止编译您的程序.你可以使用vars pragma,my,state或者我们的:

use vars qw($temp);
our $temp;
my $temp;
state $temp;

正如你所见,本地不是其中的一部分.为什么?因为那就是它的样子.如果不同的话,我会更喜欢它.

如果使用完整的包规范,严格不会抱怨,例如$Foo :: Bar :: temp.你可以错误地输入所有这些,而不会注意到.

我主要保留我对Perl的特殊变量使用local,你不必声明.如果我想在子例程中使用$_,也许是为了使用默认使用$_的运算符,我可能会从本地$_开始:

sub something {
     local $_ = shift @_;
     s/.../.../;
     tr/.../.../;
     ...;
     }

我可能更频繁地使用本地输入记录分隔符,所以我可以使用不同的行结尾而不影响之前的可能:

my $data = do { local $/; <FILE> };

那些工作是因为隐含的第一次使用那些你没见过的变量.

否则,我可能希望将变量设置为其子例程的私有,因此子例程之外的任何内容都无法看到它.在这种情况下,我不希望程序的其余部分可以读取或写入的包变量.这是我变量的工作:

sub something {
    my $temp = ...;

    }

编程的诀窍是限制你想要的东西.如果您的程序的其余部分无法查看或更改变量,那么我就是您的选择.

我解释这是Learning Perl并在Mastering Perl中写了包变量的细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读