zoukankan      html  css  js  c++  java
  • PERL

    [oracle@jhoa 2]$ cat a2.pl 
    foreach $key (keys %main::)
     {print "$$key =>	$main::{$key}
    ";}
    
    [oracle@jhoa 2]$ perl a2.pl 
    $/ =>	*main::/
    $stderr =>	*main::stderr
    $key =>	*main::key
    $utf8:: =>	*main::utf8::
    $" =>	*main::"
    $CORE:: =>	*main::CORE::
    
    main包内容:
    
     
    Perl 本地变量; 一个是my 一个是local
    
    Perl 的my操作符用于创建词法作用域变量。通过my创建的变量,存活于声明开始的地方,直到闭合作用域结尾。
    
    闭合作用域指的可以是一对花括号中的区域,可以是一个文件,也可以是一个eval字符串。
    
    闭合作用域是词法作用域,仅在编译时对程序源代码扫描过程中确定。
    
    
    [oracle@jhoa 2]$ perl a4.pl 
    1-----2.7183
    2-----3.1415926
    
    [oracle@jhoa 2]$ cat a4.pl 
    $a = 3.1415926; ##全局变量
    {
     my $a = 2.7183; ##词法的
    print "1-----$a
    ";
    }
    print "2-----$a
    ";
    
    [oracle@jhoa 2]$ perl a4.pl 
    1-----2.7183
    2-----3.1415926
    
    这里花括号外面用到的变量$a是全局变量$a,而在花括号内部的$a是词法变量$a,它的作用域仅限于花括号内。
    
    my变量不存在与符号表中
    
    
    local 的运行时作用域:
    
    local在运行时起作用
    
    my编译时起作用
    
    my创建了不同的变量,而local只是将已存在的变量值暂时保存起来
    
    [oracle@jhoa 2]$ cat a4.pl 
    $a = 3.1415926; ##全局变量
    {
     local $a = 2.7183; ##词法的
    print "1-----$a
    ";
    }
    print "2-----$a
    ";
    
    [oracle@jhoa 2]$ perl a4.pl 
    1-----2.7183
    2-----3.1415926
    
    通常情况下,我们应该用my,理由之一是my比local快,因为local将值存入栈的操作,是需要消耗时间的。
    
    
    [oracle@jhoa 2]$ cat a5.pl 
    my @a = (a,b,c,d);
    local ($a,$b,$c) = @a; ##@a中的前3个元素
    print "$a is $a
    ";
    print "$b is $b
    ";
    print "$c is $c
    ";
    
    [oracle@jhoa 2]$ perl a5.pl 
    $a is a
    $b is b
    $c is c
    
    
    若非必要请勿直接使用@_
    
    [oracle@jhoa 2]$ cat a6.pl 
    sub digits_gone {
    my ($str) = @_;
    $str =~ tr/0-9//d;   ##删除字符窜中的数字
    print "$str is $str
    ";                
    }
    digits_gone (aaaaa,bbbbb,cccccc);
    [oracle@jhoa 2]$ perl a6.pl 
    $str is aaaaa
    
    子程序的参数都是通过数组变量@_传递的。
    
    数组的引用:
    
    sh-3.2$ cat 2.pl 
    {my @a ="a b c d e f g";$b=@a;} print "$b
    ";
    {my @a ="a b c d e f g";$b=@a;} print "@$b
    ";
    {my @a ="a b c d e f g";$b=@a;} print "@{$b}
    ";
    sh-3.2$ perl 2.pl 
    ARRAY(0x9e9a080)
    a b c d e f g
    a b c d e f g
    
    数组元素的引用:
    sh-3.2$ cat 5.pl 
    my @a = qw/1 2 3 4 5 6/;
    {my @a = qw/1 2 3 4 5 6/; $b=@a;} print "$$b[1]
    ";
    {my @a = qw/1 2 3 4 5 6/; $b=@a;} print "$b->[1]
    ";
    sh-3.2$ perl 5.pl 
    2
    2
    
    
    
    
    
    hash引用:
    
    [oracle@jhoa 3]$ cat 2.pl 
    {my %a =(a=>1,b=>2,c=>3) ;$b=\%a;} print "$b
    ";
    {my %a =(a=>1,b=>2,c=>3) ;$b=\%a;} print %$b;
    [oracle@jhoa 3]$ perl 2.pl 
    HASH(0x7013080)
    c3a1b2[oracle@jhoa 3]$ 
    
    
    
    函数引用:
    
    [oracle@jhoa 3]$ cat 3.pl 
    sub printlog {
     print "xxxxxxx
    ";
    }
    {my $a=&printlog;print "$a
    "};
    {my $a=&printlog;print &$a};
    [oracle@jhoa 3]$ perl 3.pl 
    CODE(0xc1b0080)
    xxxxxxx
    1[oracle@jhoa 3]$ 
    
    1 是函数的返回值:
    
    简单变量的引用:
    
    sh-3.2$ cat 4.pl 
    {my $a ="a";$b=$a;} print "$b
    ";
    {my $a ="a";$b=$a;} print "$$b
    ";
    {my $a ="a";$b=$a;} print "${$b}
    ";
    sh-3.2$ perl 4.pl 
    SCALAR(0x168fb060)
    a
    a
    
    
    
    
    

  • 相关阅读:
    String为值类型还是引用类型
    Mat数据类型
    各数据类型取值范围和所占字节数
    opencv matType
    python函数参数中冒号与箭头
    批量删除list中元素的方法
    PyQt QListview和QListWidgt
    函数形参中的冒号与箭头
    CSS选择器之相邻兄弟选择器
    CSS选择器之子元素选择器
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351947.html
Copyright © 2011-2022 走看看