Perl 變量
變量是存儲在內(nèi)存中的數(shù)據(jù),創(chuàng)建一個變量即會在內(nèi)存上開辟一個空間。
解釋器會根據(jù)變量的類型來決定其在內(nèi)存中的存儲空間,因此你可以為變量分配不同的數(shù)據(jù)類型,如整型、浮點型、字符串等。
上一章節(jié)中我們已經(jīng)為大家介紹了Perl的三個基本的數(shù)據(jù)類型:標(biāo)量、數(shù)組、哈希。
- 標(biāo)量 $ 開始, 如$a $b 是兩個標(biāo)量。
- 數(shù)組 @ 開始 , 如 @a @b 是兩個數(shù)組。
- 哈希 % 開始 , %a %b 是兩個哈希。
Perl 為每個變量類型設(shè)置了獨立的命令空間,所以不同類型的變量可以使用相同的名稱,你不用擔(dān)心會發(fā)生沖突。例如 $foo 和 @foo 是兩個不同的變量。
創(chuàng)建變量
變量不需要顯式聲明類型,在變量賦值后,解釋器會自動分配匹配的類型空間。
變量使用等號(=)來賦值。
我們可以在程序中使用 use strict 語句讓所有變量需要強制聲明類型。
等號左邊為變量,右邊為值,實例如下:
$age = 25; # 整型 $name = "youj"; # 字符串 $salary = 1445.50; # 浮點數(shù)
以上代碼中 25, "youj" 和 1445.50 分別賦值給 $age, $name 和 $salary 變量。
接下來我們會看到數(shù)組和哈希的使用。
標(biāo)量變量
標(biāo)量是一個單一的數(shù)據(jù)單元。 數(shù)據(jù)可以是整數(shù),浮點數(shù),字符,字符串,段落等。簡單的說它可以是任何東西。以下是標(biāo)量的簡單應(yīng)用:
#!/usr/bin/perl $age = 25; # 整型 $name = "youj"; # 字符串 $salary = 1445.50; # 浮點數(shù) print "Age = $age\n"; print "Name = $name\n"; print "Salary = $salary\n";
以上程序執(zhí)行輸出結(jié)果為:
Age = 25 Name = youj Salary = 1445.5
數(shù)組變量
數(shù)組是用于存儲一個有序的標(biāo)量值的變量。
數(shù)組 @ 開始。
要訪問數(shù)組的變量,可以使用美元符號($)+變量名,并指定下標(biāo)來訪問,實例如下所示:
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("google", "youj", "taobao"); print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";
以上程序執(zhí)行輸出結(jié)果為:
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = google $names[1] = youj $names[2] = taobao
程序中我們在 $ 標(biāo)記前使用了轉(zhuǎn)義字符 (\) ,這樣才能輸出字符 $。
哈希變量
哈希是一個 key/value 對的集合。
哈希 % 開始。
如果要訪問哈希值,可以使用 $ + {key} 格式來訪問:
#!/usr/bin/perl %data = ('google', 45, 'youj', 30, 'taobao', 40); print "\$data{'google'} = $data{'google'}\n"; print "\$data{'youj'} = $data{'youj'}\n"; print "\$data{'taobao'} = $data{'taobao'}\n";
以上程序執(zhí)行輸出結(jié)果為:
$data{'google'} = 45 $data{'youj'} = 30 $data{'taobao'} = 40
變量上下文
所謂上下文:指的是表達式所在的位置。
上下文是由等號左邊的變量類型決定的,等號左邊是標(biāo)量,則是標(biāo)量上下文,等號左邊是列表,則是列表上下文。
Perl 解釋器會根據(jù)上下文來決定變量的類型。實例如下:
#!/usr/bin/perl @names = ('google', 'youj', 'taobao'); @copy = @names; # 復(fù)制數(shù)組 $size = @names; # 數(shù)組賦值給標(biāo)量,返回數(shù)組元素個數(shù) print "名字為 : @copy\n"; print "名字?jǐn)?shù)為 : $size\n";
以上程序執(zhí)行輸出結(jié)果為:
名字為 : google youj taobao 名字?jǐn)?shù)為 : 3
代碼中 @names 是一個數(shù)組,它應(yīng)用在了兩個不同的上下文中。第一個將其復(fù)制給另外一個數(shù)組,所以它輸出了數(shù)組的所有元素。第二個我們將數(shù)組賦值給一個標(biāo)量,它返回了數(shù)組的元素個數(shù)。
以下列出了多種不同的上下文:
序號 | 上下文及描述 |
---|---|
1 | 標(biāo)量 ?
賦值給一個標(biāo)量變量,在標(biāo)量上下文的右側(cè)計算 |
2 | 列表 ?
賦值給一個數(shù)組或哈希,在列表上下文的右側(cè)計算。 |
3 | 布爾 ?
布爾上下文是一個簡單的表達式計算,查看是否為 true 或 false。 |
4 | Void ? 這種上下文不需要關(guān)系返回什么值,一般不需要返回值。 |
5 | 插值 ?
這種上下文只發(fā)生在引號內(nèi)。 |
更多建議: