Perl 變量

變量是存儲(chǔ)在內(nèi)存中的數(shù)據(jù),創(chuàng)建一個(gè)變量即會(huì)在內(nèi)存上開(kāi)辟一個(gè)空間。

解釋器會(huì)根據(jù)變量的類(lèi)型來(lái)決定其在內(nèi)存中的存儲(chǔ)空間,因此你可以為變量分配不同的數(shù)據(jù)類(lèi)型,如整型、浮點(diǎn)型、字符串等。

上一章節(jié)中我們已經(jīng)為大家介紹了Perl的三個(gè)基本的數(shù)據(jù)類(lèi)型:標(biāo)量、數(shù)組、哈希。

  • 標(biāo)量 $ 開(kāi)始, 如$a $b 是兩個(gè)標(biāo)量。
  • 數(shù)組 @ 開(kāi)始 , 如 @a @b 是兩個(gè)數(shù)組。
  • 哈希 % 開(kāi)始 , %a %b 是兩個(gè)哈希。

Perl 為每個(gè)變量類(lèi)型設(shè)置了獨(dú)立的命令空間,所以不同類(lèi)型的變量可以使用相同的名稱(chēng),你不用擔(dān)心會(huì)發(fā)生沖突。例如 $foo 和 @foo 是兩個(gè)不同的變量。


創(chuàng)建變量

變量不需要顯式聲明類(lèi)型,在變量賦值后,解釋器會(huì)自動(dòng)分配匹配的類(lèi)型空間。

變量使用等號(hào)(=)來(lái)賦值。

我們可以在程序中使用 use strict 語(yǔ)句讓所有變量需要強(qiáng)制聲明類(lèi)型。

等號(hào)左邊為變量,右邊為值,實(shí)例如下:

$age = 25;             # 整型
$name = "youj";      # 字符串
$salary = 1445.50;     # 浮點(diǎn)數(shù)

以上代碼中 25, "youj" 和 1445.50 分別賦值給 $age, $name$salary 變量。

接下來(lái)我們會(huì)看到數(shù)組和哈希的使用。


標(biāo)量變量

標(biāo)量是一個(gè)單一的數(shù)據(jù)單元。 數(shù)據(jù)可以是整數(shù),浮點(diǎn)數(shù),字符,字符串,段落等。簡(jiǎn)單的說(shuō)它可以是任何東西。以下是標(biāo)量的簡(jiǎn)單應(yīng)用:

#!/usr/bin/perl

$age = 25;             # 整型
$name = "youj";      # 字符串
$salary = 1445.50;     # 浮點(diǎn)數(shù)

print "Age = $age\n";
print "Name = $name\n";
print "Salary = $salary\n";

以上程序執(zhí)行輸出結(jié)果為:

Age = 25
Name = youj
Salary = 1445.5

數(shù)組變量

數(shù)組是用于存儲(chǔ)一個(gè)有序的標(biāo)量值的變量。

數(shù)組 @ 開(kāi)始。

要訪問(wèn)數(shù)組的變量,可以使用美元符號(hào)($)+變量名,并指定下標(biāo)來(lái)訪問(wèn),實(shí)例如下所示:

#!/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

程序中我們?cè)?$ 標(biāo)記前使用了轉(zhuǎn)義字符 (\) ,這樣才能輸出字符 $。


哈希變量

哈希是一個(gè) key/value 對(duì)的集合。

哈希 % 開(kāi)始。

如果要訪問(wèn)哈希值,可以使用 $ + {key} 格式來(lái)訪問(wèn):

#!/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

變量上下文

所謂上下文:指的是表達(dá)式所在的位置。

上下文是由等號(hào)左邊的變量類(lèi)型決定的,等號(hào)左邊是標(biāo)量,則是標(biāo)量上下文,等號(hào)左邊是列表,則是列表上下文。

Perl 解釋器會(huì)根據(jù)上下文來(lái)決定變量的類(lèi)型。實(shí)例如下:

#!/usr/bin/perl

@names = ('google', 'youj', 'taobao');

@copy = @names;   # 復(fù)制數(shù)組
$size = @names;   # 數(shù)組賦值給標(biāo)量,返回?cái)?shù)組元素個(gè)數(shù)

print "名字為 : @copy\n";
print "名字?jǐn)?shù)為 : $size\n";

以上程序執(zhí)行輸出結(jié)果為:

名字為 : google youj taobao
名字?jǐn)?shù)為 : 3

代碼中 @names 是一個(gè)數(shù)組,它應(yīng)用在了兩個(gè)不同的上下文中。第一個(gè)將其復(fù)制給另外一個(gè)數(shù)組,所以它輸出了數(shù)組的所有元素。第二個(gè)我們將數(shù)組賦值給一個(gè)標(biāo)量,它返回了數(shù)組的元素個(gè)數(shù)。

以下列出了多種不同的上下文:

序號(hào) 上下文及描述
1 標(biāo)量 ?

賦值給一個(gè)標(biāo)量變量,在標(biāo)量上下文的右側(cè)計(jì)算

2 列表 ?

賦值給一個(gè)數(shù)組或哈希,在列表上下文的右側(cè)計(jì)算。

3 布爾 ?

布爾上下文是一個(gè)簡(jiǎn)單的表達(dá)式計(jì)算,查看是否為 true 或 false。

4 Void ?

這種上下文不需要關(guān)系返回什么值,一般不需要返回值。

5 插值 ?

這種上下文只發(fā)生在引號(hào)內(nèi)。