在perl中声明变量的相关性

时间:2011-03-19 18:40:59

标签: perl

在Perl编程中,当我们可以改变它包含的值时,变量声明的相关性是什么?

e.g。

my $name ="johny";

在下一个语句中,我们可以用以下内容更改它包含的值的类型:

$name = 10;

那么声明变量的相关性是什么,以及当类型的类型未修复时,Perl如何将内存更改为变量?

4 个答案:

答案 0 :(得分:4)

声明变量的优点是帮助减少错误,特别是与以下内容结合使用时

use strict;
use warnings;

在这种情况下,如果您输错变量名称,Perl会告诉您正在引用未声明的变量:

my $name = 'johnny';
print $nane;

答案 1 :(得分:3)

你是对的,不需要变量声明来区分整数/浮点数......类型,如C。

我认为perl变量声明不是内存分配指令,更像是指定$ name有效的命名空间指令。解释器根据需要分配/释放内存。在$ name中构建一个非常长的字符串将导致为它分配更多的内存。

使用“my $ var”声明变量使其成为当前范围的本地变量。没有“我的”声明,它是一个全局变量。通常子例程应声明它们与“my”一起使用的任何变量,以避免污染全局命名空间。有关更多背景,请阅读perlsub文档。

声明变量的地方可能会产生性能影响,因为它可能会导致变量被销毁/重新创建,如here所述。

答案 2 :(得分:2)

声明变量有几个原因。

  • 声明变量的范围。

    {
      my $salutations = "hello\n";
    }
    print $salutations; # undef
    
  • use strict;一起使用时捕捉拼写错误。

    use strict;
    my $salutations = "hello\n";
    print $_salutations;
    # Global symbol "$_salutations" requires explicit package name ...
    

    这就是为什么建议将use strict;放在程序的开头。

  • 在新块中重用变量名,而不影响封闭块。

    my $salutations = "hello\n";
    {
      my $salutations = "hi there\n";
      print $salutations;
      # prints: hi there
    }
    print $salutations;
    # prints: hello
    

答案 3 :(得分:-2)

使用特殊变量和无偿的自动生存会导致对黑魔法的依赖。另外,它影响了变量的范围,这使得更难以跟踪程序流程,因此维护和调试更加困难。

对于问题的其他部分,Perl数据类型是标量,数组和散列。与低级语言或其他更强类型的语言不同,原始数据类型并没有真正发挥作用。至于它是如何在编译器/解释器内部实际处理的,我不是百分百肯定,但是一个好的起点可能就在这里:http://dev.perl.org/perl5/docs/perlhack.html