标量变量 #

一、标量概述 #

标量(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