Perl 数据类型
Perl - 数据类型
Section titled “Perl - 数据类型”Perl 是一种动态且弱类型的语言。这意味着您无需显式声明变量的类型;Perl 会根据数据使用的上下文推断类型。
Perl 有三种基本的内置数据类型:
| 序号 | 类型和描述 |
|---|---|
| 1 | 标量 (Scalars) |
| 2 | 数组 (Arrays) |
| 3 | 哈希 (Hashes) |
Perl 在内部将数字处理为有符号整数或双精度浮点值,根据需要在这两者之间进行转换。
数值字面量可以用各种格式指定:
| 类型 | 示例值 |
|---|---|
| 整数 | 1234, -100 |
| 浮点数 | 3.14159, -0.5, 2.0 (or 2.) |
| 科学计数法 | 6.022e23 (for 6.022 x 10^23), 1.0E-9 |
| 十六进制 (基数 16) | 0xFF (255 in decimal), 0xbeef |
| 八进制 (基数 8) | 0755 (493 in decimal), 012 (10 in decimal) (注意:八进制数以零开头) |
| 二进制 (基数 2) | 0b1010 (10 in decimal), 0b1111_0000 |
| 下划线增强可读性 | 1_000_000 (one million), 3.141_592_653 (下划线会被 Perl 忽略) |
字符串字面量
Section titled “字符串字面量”字符串是字符序列。它们可以使用单引号 ('...') 或双引号 ("...") 定义。
- 单引号字符串 (
'...'): 几乎不执行插值 (interpolation)。只有\'(用于获取字面量单引号)和\\(用于获取字面量反斜杠)会被解释。变量名如$name会被视为字面量。 my $text = 'This is $var literally.\n'; # $var 和 \n 不会被展开- 双引号字符串 (
"..."): 执行变量插值(标量和数组变量会被替换为其值)和转义序列 (escape sequence) 展开(例如,\n变为换行符)。 my $name = "Perl"; my $greeting = "Hello, $name!\n"; # $name 被替换,\n 变为换行符
双引号字符串(以及 qq// 或正则表达式等类似上下文)中常用的转义序列:
| 转义序列 | 含义 |
|---|---|
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\f | 换页 |
\b | 退格 (通常) |
\a | 响铃 |
\e | 转义字符 (ASCII ESC, 0x1B) |
\" | 字面量双引号(在 "..." 内部需要) |
\' | 字面量单引号(在 '...' 内部需要) |
\\ | 字面量反斜杠 |
\$ | 字面量美元符号(防止 $variable 插值) |
\@ | 字面量 at 符号(防止 @array 插值) |
\0NNN | 由八进制数 (NNN) 指定的字符 |
\xNN | 由十六进制数 (NN) 指定的字符 |
\x{NNNN} | 由十六进制数 (Unicode 码点) 指定的字符 |
\N{CHARNAME} | 命名的 Unicode 字符(例如,\N{GREEK SMALL LETTER PI})。需要 use charnames ':full'; 或类似语句。 |
\u | 将下一个字符转换为大写。 |
\l | 将下一个字符转换为小写。 |
\U | 将所有后续字符转换为大写,直到遇到 \E。 |
\L | 将所有后续字符转换为小写,直到遇到 \E。 |
\Q | 对所有后续非字母数字字符进行引用(加反斜杠),直到遇到 \E(对于正则表达式中的字面量字符串很有用)。 |
\E | 结束 \U、\L 或 \Q 修改。 |
字符串字面量和转义的示例
Section titled “字符串字面量和转义的示例”#!/usr/bin/env perluse strict;use warnings;use utf8; # 允许在源代码中使用 UTF-8use charnames ':full'; # 用于 \N{...}
my $language = "Perl";
# 包含插值和转义的双引号字符串my $str1 = "Welcome to \t$language!\nThis is fun.";print "String 1:\n$str1\n";
# 单引号字符串(无插值)my $str2 = 'The variable $language is not expanded here. \n is literal.';print "String 2:\n$str2\n\n";
# 大小写修改my $str3 = "\uall \Llower THEN \UUPPER\E case again.";print "String 3: $str3\n";
# 用于正则表达式的引用my $search_term = "(some.text)*";my $quoted_term = "\Q$search_term\E";print "String 4: Original term: '$search_term', Quoted for regex: '$quoted_term'\n";
# Unicode 字符my $str5 = "Pi symbol: \N{GREEK SMALL LETTER PI} is \x{03c0}";print "String 5: $str5\n";这将产生以下结果:
String 1:Welcome to Perl!This is fun.
String 2:The variable $language is not expanded here. \n is literal.
String 3: All lower then UPPER case again.String 4: Original term: '(some.text)*', Quoted for regex: '\(some\.text\)\*'String 5: Pi symbol: π is πPerl 还提供了类引用运算符 (q//、qq//、qw//、qx//、qr//),提供更灵活的方式来定义字符串、单词列表、执行命令或编译正则表达式,并允许使用不同的分隔符。