Latest web development tutorials

Perl 變量

變量是存儲在內存中的數據,創建一個變量即會在內存上開闢一個空間。

解釋器會根據變量的類型來決定其在內存中的存儲空間,因此你可以為變量分配不同的數據類型,如整型、浮點型、字符串等。

上一章節中我們已經為大家介紹了Perl的三個基本的數據類型:標量、數組、哈希。

    標量$ 開始, 如$a $b 是兩個標量。
  • 數組@ 開始, 如@a @b 是兩個數組。
  • 哈希% 開始, %a %b 是兩個哈希。

Perl 為每個變量類型設置了獨立的命令空間,所以不同類型的變量可以使用相同的名稱,你不用擔心會發生衝突。 例如$foo 和@foo 是兩個不同的變量。


創建變量

變量不需要顯式聲明類型,在變量賦值後,解釋器會自動分配匹配的類型空間。

變量使用等號(=)來賦值。

我們可以在程序中使用use strict語句讓所有變量需要強制聲明類型。

等號左邊為變量,右邊為值,實例如下:

$age = 25;             # 整型
$name = "w3big";      # 字符串
$salary = 1445.50;     # 浮点数

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

接下來我們會看到數組和哈希的使用。


標量變量

標量是一個單一的數據單元。 數據可以是整數,浮點數,字符,字符串,段落等。 簡單的說它可以是任何東西。 以下是標量的簡單應用:

#!/usr/bin/perl

$age = 25;             # 整型
$name = "w3big";      # 字符串
$salary = 1445.50;     # 浮点数

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

以上程序執行輸出結果為:

Age = 25
Name = w3big
Salary = 1445.5

數組變量

數組是用於存儲一個有序的標量值的變量。

數組@ 開始。

要訪問數組的變量,可以使用美元符號($)+變量名,並指定下標來訪問,實例如下所示:

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("google", "w3big", "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";

以上程序執行輸出結果為:

$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = google
$names[1] = w3big
$names[2] = taobao

程序中我們在$ 標記前使用了轉義字符(\) ,這樣才能輸出字符$。


哈希變量

哈希是一個key/value對的集合。

哈希% 開始。

如果要訪問哈希值,可以使用$ + {key}格式來訪問:

#!/usr/bin/perl

%data = ('google', 45, 'w3big', 30, 'taobao', 40);

print "\$data{'google'} = $data{'google'}\n";
print "\$data{'w3big'} = $data{'w3big'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";

以上程序執行輸出結果為:

$data{'google'} = 45
$data{'w3big'} = 30
$data{'taobao'} = 40

變量上下文

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

上下文是由等號左邊的變量類型決定的,等號左邊是標量,則是標量上下文,等號左邊是列表,則是列表上下文。

Perl 解釋器會根據上下文來決定變量的類型。 實例如下:

#!/usr/bin/perl

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

@copy = @names;   # 复制数组
$size = @names;   # 数组赋值给标量,返回数组元素个数

print "名字为 : @copy\n";
print "名字数为 : $size\n";

以上程序執行輸出結果為:

名字为 : google w3big taobao
名字数为 : 3

代碼中@names 是一個數組,它應用在了兩個不同的上下文中。 第一個將其複制給另外一個數組,所以它輸出了數組的所有元素。 第二個我們將數組賦值給一個標量,它返回了數組的元素個數。

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

序號 上下文及描述
1 標量−

賦值給一個標量變量,在標量上下文的右側計算

2 列表−

賦值給一個數組或哈希,在列表上下文的右側計算。

3 布爾−

布爾上下文是一個簡單的表達式計算,查看是否為true 或false。

4 Void −

這種上下文不需要關係返回什麼值,一般不需要返回值。

5 插值−

這種上下文只發生在引號內。