Perl 入門教程login
Perl 入門教程
作者:php.cn  更新時間:2022-04-14 16:05:12

Perl 變數


變數是儲存在記憶體中的數據,建立一個變數即會在記憶體上開闢一個空間。

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

上一章我們已經為大家介紹了Perl的三個基本的資料型態:標量、陣列、雜湊。

  • 標量 $ 開始, 如$a $b 是兩個標量。


  • 陣列 @ 開始 , 如 @a @b 是兩個陣列。


  • 哈希 % 開始 , %a  %b 是兩個雜湊。

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


建立變數

變數不需要明確宣告類型,在變數賦值後,解釋器會自動指派符合的類型空間。

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

我們可以在程式中使用 use strict 語句讓所有變數需要強制宣告類型。

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

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

以上程式碼中25, "php" 和 1445.50 分別賦值為$age , $name$salary 變數。

接下來我們會看到陣列和雜湊的使用。


標量變數

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

#!/usr/bin/perl

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

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

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

Age = 25
Name = php
Salary = 1445.5

數組變數

陣列是用來儲存一個有順序的標量值的變數。

陣列 @ 開始。

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

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("google", "php", "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] = php
$names[2] = taobao

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


哈希變數

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

哈希 % 開始。

如果要存取雜湊值,可以使用$ + {key} 格式來存取:

#!/usr/bin/perl

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

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

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

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

變數上下文

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

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

Perl 解譯器會根據上下文來決定變數的型別。實例如下:

#!/usr/bin/perl

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

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

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

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

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

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

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

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

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

列表−賦值給一個陣列或哈希,在列表上下文的右邊計算。

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

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

插值 −這種上下文只會發生在引號內。