Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Perl中,local()可以创建一个变量吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Stackoverflow和Google中读过许多帖子,告诉我 local不会创建变量,而是在现有变量上运行.

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

#use Strict;
#use warnings;

&func;

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

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

解决方法

除非您使用R_349_11845@y声明变量,否则没有完整包规范的变量将进入当前包.以下是您第一次看到变量的用法以及它们的用途: @H_730_4@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/.../.../;
     ...;
     }

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

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

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

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

sub something {
    my $temp = ...;

    }

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

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

大佬总结

以上是大佬教程为你收集整理的在Perl中,local()可以创建一个变量吗?全部内容,希望文章能够帮你解决在Perl中,local()可以创建一个变量吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。