Like Share Discussion Bookmark Smile

J.J. Huang   2021-03-07   Perl   瀏覽次數:

Perl - 第四章 | Perl 變量

變量是保留存儲值的存儲位置。這意味著當你建立變量時,你會在內存中保留一些空間。

解釋器根據變量的資料類型分配內存,並確定可以在保留內存中存儲的內容。因此,通過為變量分配不同的資料類型,可以在這些變量中存儲整數,小數或字符串。

我們了解到Perl具有以下三種基本資料類型:

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

Perl 在單獨的命名空間中維護每種變量類型。因此,你可以不必擔心衝突,可以對標量變量,數組或哈希使用相同的名稱。這意味著 $foo 和 @foo 是兩個不同的變量。

建立變量

無需顯式聲明 Perl 變量即可保留內存空間。為變量分配值時,聲明自動發生。等號(=)用於將值分配給變量。

請注意,如果在程序中使用use strict語句,則在使用變量之前必須先聲明該變量。

=運算符左側的操作數是變量的名稱,=運算符右側的操作數是存儲在變量中的值。例如:

1
2
3
$age = 25;             # An integer assignment
$name = "J.J."; # A string
$salary = 1445.50; # A floating point

這裡的25,”J.J.”和1445.50分別是分配給 $age、$name 和 $salary 變量的值。

標量變量

標量是資料的單個單位。該資料可能是整數,浮點數,字符,字符串,段落或整個網頁。簡單地說,它可以是任何東西,但只能是一件事。

這是一個使用標量變量的簡單範例:

1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

$age = 25; # An integer assignment
$name = "J.J."; # A string
$salary = 1445.50; # A floating point

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

這將產生以下結果:

1
2
3
Age = 25
Name = J.J.
Salary = 1445.5

數組變量

數組是存儲標量值的有序列表的變量。數組變量前面有一個“@”符號。要引用數組的單個元素,將使用帶符號名的美元符號($),後跟方括號中的元素索引。

這是一個使用數組變量的簡單範例:

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

@ages = (25, 30, 40);
@names = ("J.J.", "Lisa", "Kumar");

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";

在這裡,我們僅在 $ 符號之前使用轉義符號(\)進行打印。其他 Perl 會將其理解為變量並打印其值。執行後,將產生以下結果:

1
2
3
4
5
6
$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = J.J.
$names[1] = Lisa
$names[2] = Kumar

哈希變量

哈希是一組key/value對。哈希變量前面帶有百分號(%)。要引用哈希的單個元素,將使用哈希變量名稱,後跟與大括號中的值關聯的“鍵”。

這是一個使用哈希變量的簡單範例:

1
2
3
4
5
6
7
#!/usr/bin/perl

%data = ('J.J.', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'J.J.'} = $data{'J.J.'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

這將產生以下結果:

1
2
3
$data{'J.J.'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

變量上下文

Perl根據上下文(即使用變量的情況)對同一變量進行不同的處理。讓我們檢查以下範例:

1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

@names = ('J.J.', 'Lisa', 'Kumar');

@copy = @names;
$size = @names;

print "Given names are : @copy\n";
print "Number of names are : $size\n";

這將產生以下結果:

1
2
Given names are : J.J. Lisa Kumar
Number of names are : 3

@names是一個數組,已在兩個不同的上下文中使用過。首先,我們將其複製到任何其他數組(即list)中,因此假定上下文為list context,它返回了所有元素。接下來,我們使用相同的數組,並嘗試將該數組存儲在標量中,因此在這種情況下,假定上下文是標量上下文,它僅返回此數組中的元素數。

下表列出了各種上下文:

序號 上下文和描述
1 標量:分配給標量變量將在標量上下文中評估右側。
2 列表:分配給數組或哈希將評估列表上下文中的右側。
3 布爾:布爾上下文只是在其中對錶達式求值以查看它是真還是假的任何地方。
4 空白:該上下文不僅不在乎返回值是什麼,甚至不希望返回值。
5 內插式:此上下文僅發生在引號內或類似引號的工作中。

註:以上參考了
Tutorialspoint, Perl - Variables