标量变量 #
一、标量概述 #
标量(Scalar)是Perl中最基本的数据类型,用于存储单个值。标量变量以 $ 开头。
1.1 标量类型 #
- 数字(整数、浮点数)
- 字符串
- 布尔值(Perl没有专门的布尔类型)
1.2 变量声明 #
使用 my 关键字声明:
perl
my $name = "Perl";
my $count = 42;
my $pi = 3.14159;
二、数字 #
2.1 整数 #
perl
my $decimal = 42;
my $negative = -10;
my $large = 1_000_000;
2.2 浮点数 #
perl
my $pi = 3.14159;
my $scientific = 1.5e10;
my $small = 1e-5;
2.3 不同进制 #
perl
my $hex = 0xFF;
my $octal = 0755;
my $binary = 0b1010;
2.4 数字操作 #
perl
my $a = 10;
my $b = 3;
my $sum = $a + $b;
my $diff = $a - $b;
my $product = $a * $b;
my $quotient = $a / $b;
my $remainder = $a % $b;
my $power = $a ** $b;
2.5 数字函数 #
perl
my $num = -3.7;
print abs($num);
print int($num);
print int(3.7);
print sqrt(16);
print rand();
print rand(100);
print int(rand(100));
三、字符串 #
3.1 字符串创建 #
单引号字符串:
perl
my $str1 = 'Hello, World!';
my $str2 = 'Hello\nWorld';
双引号字符串:
perl
my $str3 = "Hello, World!";
my $str4 = "Hello\nWorld";
my $name = "Perl";
my $str5 = "Hello, $name!";
3.2 转义字符 #
| 转义符 | 说明 |
|---|---|
| \n | 换行 |
| \t | 制表符 |
| \r | 回车 |
| \ | 反斜杠 |
| " | 双引号 |
| ' | 单引号 |
| $ | 美元符号 |
3.3 字符串操作 #
连接:
perl
my $str = "Hello" . " " . "World";
重复:
perl
my $line = "-" x 20;
长度:
perl
my $len = length("Hello");
子串:
perl
my $str = "Hello, World!";
my $sub = substr($str, 0, 5);
my $sub2 = substr($str, 7);
my $sub3 = substr($str, -6);
3.4 字符串函数 #
perl
my $str = " Hello, World! ";
my $upper = uc($str);
my $lower = lc($str);
my $trimmed = $str;
$trimmed =~ s/^\s+|\s+$//g;
my $found = index($str, "World");
my $rfound = rindex($str, "o");
my @chars = split //, "Hello";
my $joined = join "-", @chars;
四、变量插值 #
4.1 双引号插值 #
perl
my $name = "Perl";
my $version = 5.36;
print "Language: $name\n";
print "Version: $version\n";
print "Full: ${name}v${version}\n";
4.2 避免插值 #
perl
my $name = "Perl";
print 'Name: $name';
print "Name: \$name";
4.3 数组插值 #
perl
my @items = ("apple", "banana", "cherry");
print "Items: @items\n";
print "Items: @items\n";
五、布尔值 #
Perl没有专门的布尔类型,使用标量表示真假。
5.1 假值 #
以下值被视为假:
- 数字
0 - 字符串
"0" - 空字符串
"" - 空列表
() undef
5.2 真值 #
其他所有值都被视为真:
perl
my @tests = (
1,
-1,
"hello",
" ",
"0.0",
);
foreach my $test (@tests) {
if ($test) {
print "'$test' is true\n";
}
}
5.3 布尔操作 #
perl
my $a = 1;
my $b = 0;
my $and = $a && $b;
my $or = $a || $b;
my $not = !$a;
my $defined_or = $b // "default";
六、undef #
6.1 未定义值 #
perl
my $var;
print defined($var) ? "defined" : "undefined";
6.2 使用undef #
perl
my $var = undef;
$var = undef;
6.3 定义或运算符 #
perl
my $name;
my $display = $name // "Anonymous";
print $display;
七、类型转换 #
7.1 自动转换 #
Perl根据上下文自动转换类型:
perl
my $str = "42";
my $num = $str + 8;
print $num;
my $num2 = 100;
my $str2 = $num2 . " items";
print $str2;
7.2 显式转换 #
perl
my $str = "42";
my $num = $str + 0;
my $num2 = 100;
my $str2 = "$num2";
my $str3 = '' . $num2;
八、常量 #
使用 constant 模块定义常量:
perl
use constant PI => 3.14159;
use constant MAX_SIZE => 100;
print PI;
print MAX_SIZE;
或使用只读变量:
perl
my $PI = 3.14159;
九、实践练习 #
练习1:温度转换 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my $celsius = 25;
my $fahrenheit = $celsius * 9 / 5 + 32;
say "$celsius°C = $fahrenheit°F";
练习2:字符串处理 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my $text = " Hello, Perl World! ";
my $trimmed = $text;
$trimmed =~ s/^\s+|\s+$//g;
my $upper = uc($trimmed);
my $words = scalar(split /\s+/, $trimmed);
say "Original: '$text'";
say "Trimmed: '$trimmed'";
say "Upper: '$upper'";
say "Word count: $words";
练习3:用户输入 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
print "Enter your name: ";
my $name = <STDIN>;
chomp $name;
print "Enter your age: ";
my $age = <STDIN>;
chomp $age;
say "Hello, $name! You are $age years old.";
十、总结 #
本章学习了:
- 标量变量的声明和使用
- 数字类型及其操作
- 字符串类型及其操作
- 变量插值
- 布尔值和undef
- 类型转换
下一章将学习数组。
最后更新:2026-03-27