Perl語言學習(二)Perl數(shù)據(jù)類型

1、Perl數(shù)據(jù)類型之標量

  • 標量:Scalar,以$符號開頭
    • 數(shù)字標量:
      • 值為”數(shù)字“的標量
      • Perl中的數(shù)字
        • 全部為雙精度浮點數(shù):$data = 10; $data = 10.00;
        • 普通放入表示方法:3.1415926,-500等
        • 科學計數(shù)法:2.18e22,2.18E22,5.16e-10
        • 特殊數(shù)字的表示方法:較長的、不帶小數(shù)點的數(shù)字,可用下劃線分開;非十進制數(shù)
  • 字符串標量:
    • 標量值為字符串,由引號標識
    • 字符串由可輸出的字母、數(shù)字和標點符號組成,如$data = “Hellow, World"
    • 字符串的引號既可以是單引號,也可以是雙引號,可靈活使用
    • 單引號與雙引號表示的區(qū)別:轉(zhuǎn)義符只在雙引號中有效
  • 標量的聲明
    • 標量可以在任意位置隨時聲明并使用,標量的默認初始值為空
    • 標量名可以是字符、數(shù)字或者下劃線,區(qū)分大小寫,取名應和用途相關(guān)
  • 標量的作用域
    • 標量的作用域指的是一個標量可以被有效訪問使用的范圍
    • 兩種標量的作用域范圍:
      • 包變量(全局的)
        • Perl中一個package是一個包,主函數(shù)也可以看做一個包
        • 默認情況下的變量為包變量,是包內(nèi)的全局變量,在整個包及下面的子函數(shù)中都可用
      • 私有標量
        • 分為my類型和local類型
        • my變量:只在本層模塊中可以看到這個變量
        • local變量:在本層及本層下層的函數(shù)中都可以看到的變量
      • sub g_print{
            print "$x\n";
        }
        sub test_my{
            my $x = 11;
            print "call-my $x\n";
            g_print;
        }
        sub test_local{
            local $x = 20;
            print "call-local $x\n";
            g_print;
        }
        
        $x = 9;
        test_my;
        test_local;
        print $x;
        
        # 運行結(jié)果
        call-my 11
        9
        call-local 20
        20
        9
        

2、Perl數(shù)據(jù)類型之數(shù)組

  • 數(shù)組的定義

    • 數(shù)組是標量數(shù)據(jù)的有序列表,是多個標量數(shù)據(jù)的一個集合??梢园我舛鄠€元素,從0到全部占滿內(nèi)存

    • 數(shù)組以@符號作為標識


      image.png
    • 列表直接量:

      • 包含了一系列值的列表,以括號標識,中間用逗號隔開


        image.png
      • 也可以用范圍操作符".."來產(chǎn)生列表直接量:

        • 該操作符會從左邊的數(shù)字計數(shù)到右邊,每次加1,產(chǎn)生一連串的數(shù)字


          image.png
  • 數(shù)組的賦值

    • 對于純字符串的列表,使用“qw”來表示,可省略對字符串加引號的過程
    • 形式為:
      • qw(string1 string2 string3); ##空格、制表符、換行符作為分隔符
      • 等同于("string1","string2","string3");
      • 也可用其他任何標點符號作為定界符,代替括號
      • qw !string1 string2 string3! qw /string1 string2 string3/ qw #string1 string2 string3#
    • 對數(shù)組進行賦值,可以直接將列表量傳遞給數(shù)組
      • @array = ("string1", 1.5, 418); @array = qw(string1 string2 string3);
      • 如果列表直接量中包含標量、數(shù)組,則會進行取值作為元素
      • $test = "hello"; @array = ("hello", 123); @array2 = ($test, @arrray1, "How are you")
    • 數(shù)組之間進行賦值:
      • @array1 = ('string1', 1.5, 418); @array2 = @array1;
    • 特殊的數(shù)組賦值方法:
      • pop操作符:取出數(shù)組中最后一個元素,同時返回該元素值
        • @array = (5..9); ##@array為(5,6,7,8,9)
        • $test1 = pop(@array); ##$test1為9,@array為(5,6,7,8)
        • $test2 = pop(@array); ##$test2為8,@array為(5,6,7)
      • push操作符:添加一個元素(或一串元素)到數(shù)組的尾端
        • @array = (5,6);
        • push(@array,8); ##@array為(5,6,8)
        • push(@array,1..5); ##@array為(5,6,8,1,2,3,4,5)
      • shift操作符:取出數(shù)組最左邊的元素,同時返回該元素值
        • @array = (5..9); ##@array為(5,6,7,8,9)
        • $test1 = shift(@array); ##$test1為5,@array為(6,7,8,9)
        • $test2 = shift(@array); ##$test2為6,@array為(7,8,9)
      • unshift操作符:添加一個元素(或一串元素)到數(shù)組的前端
        • @array= (5,6)
        • unshift(@array,8) ##@array為(8,5,6)
        • unshift(@array,1..5) ##@array為(1,2,3,4,5,8,5,6)
  • 數(shù)組元素的訪問

    • 通過索引對數(shù)組元素進行訪問:
      • @array = ("hello","world",123)
      • $array[0]="hello"; $array[1]="world"; $array[2] = 123;
      • 同標量$array沒有任何關(guān)系
    • 特殊索引值:
      • 用$#<數(shù)組名>代表最后一個元素的索引值。$end=$#array
      • 使用負數(shù)索引。
        • $array[-1]代表最后一個元素值
        • $array[-2]代表倒數(shù)第二個元素值

3、Perl數(shù)據(jù)類型之引用

  • 引用作為一種數(shù)據(jù)變量,可以指向變量、數(shù)組甚至子程序,代表值的地址

  • 在Perl中,可以把引用稱為指針,二者是通用、無差別的

  • 變量、變量名、地址


    image.png
  • 軟引用:

    • 軟引用類似于軟連接,存儲一個變量的名字
      • $scalar = "hello";
      • @scalar = ("hello","world",123);
      • $refer = "scalar"; ##引用變量名
    • 軟引用的解引用
      • $$refer ##實質(zhì)為$scalar,即為“Hello“
      • $$refer[0] ##實質(zhì)為$scalar[0]
  • 硬引用:

    • 硬引用類似于硬連接,就是存儲地址
      • $scalarref = \$foo; ##標量引用,$foo = "hello";
      • $constref = \186_282.42; ##常量引用
      • $arrayref = \@arr; ##數(shù)組引用,@arr= 1..100;
      • $arrRef = [1,2,3,4,5]; ##匿名數(shù)組的引用
    • 硬引用的解引用
      • 由于硬引用是地址,所以用{}來進行解引用
      • $scalarref = \$foo; ==> ${$scalarref}, 簡寫為$$scalarref
      • $constref = \186_282.42; ==> ${$constref}, 簡寫為$$constref
      • $arrayref = \@arr; ==> ${$arrayref}
      • $arrRef = [1,2,3,4,5]; ==> ${$arrRef}
  • 引用有助于創(chuàng)建復雜的數(shù)據(jù)

    • @array = ([1..5],"hello world")
    • ${$array[0]}{0} ##值為1
my $scalar = "Hello";
my @array = ("Hello","World",123);
my $scal_ref = \$scalar;
my $arr_ref = \@array;
## compare
my $scalar_com = $scalar;
my $array_0 = $array[0];

printf("scalar value:$$scal_ref\n");
printf("array0 value:$($arr_ref)[0]\n");

## modify the value
$$scal_ref = "Hello2";
$($arr_ref)[0] = "Hello2";

$scalar_com = "Hello3";
$array_0 = "Hellow3";

printf("scalar value: $scalar\n");
printf("array0 value: $array[0]\n");

# 輸出結(jié)果
scalar value:Hello
array0 value:Hello
scalar value: Hello2
array0 value: Hello2

參考來源:https://www.jikexueyuan.com/course/901.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容