在这部分的Perl教程中,我们会学习到几个操作字符串的函数。

lc, uc, length

Perl中有不少用处处理字符串的简单函数,例如:lcuc 能分别返回原始字符串的小写和大写形式;length可以返回给定字符串的字符个数。

看下面的例子:

use strict;
use warnings;
use 5.010;

my $str = 'HeLlo';

say lc $str;      # hello
say uc $str;      # HELLO
say length $str;  # 5

index

index 函数会传入两个字符串参数,并且返回第二个字符串在第一个字符串中的位置。

use strict;
use warnings;
use 5.010;

my $str = "The black cat jumped from the green tree";

say index $str, 'cat';             # 10
say index $str, 'dog';             # -1
say index $str, "The";             # 0
say index $str, "the";             # 26

第一次调用 index 返回10,因为"cat"从第10个字符开始。 第二次调用 index 返回-1,表示句子中没有"dog"。

第三次调用 index 返回0, 因为第二个字符串是第一个字符串的前缀。

第四个例子表示 index 对大小写敏感。 "the" 与 "The" 不同。

index() 是搜索字符串而不仅是单词, 所以即便是"e "也可以查询:

say index $str, "e ";              # 2

index() 还可以传入第三个参数,用来说明从哪个位置开始搜索。如我们上例看到的,"e "出现在第一个string开头的第二个字符位置,然后我们可以从第三个地方开始搜索,看一下是否有另一个"e ":

say index $str, "e ";              # 2
say index $str, "e ", 3;           # 28
say index $str, "e", 3;            # 18

查询不带空格的"e"会得到另外一个结果。

最后,还有一个叫rindex (right index)的函数,它会从字符串的右侧开始搜索:

say rindex $str, "e";              # 39
say rindex $str, "e", 38;          # 38
say rindex $str, "e", 37;          # 33

substr

它基本上是index()的反函数。index()能告诉你给定的字符串在什么位置,而substr会返回给定位置的字符串。 通常substr会传入3个参数。第一个是字符串,第二个是从零开始计数的位置(也称为偏移量),而第三个参数则是要获取的子串长度

我认为在这篇文章中最有意思的函数就是substr

use strict;
use warnings;
use 5.010;

my $str = "The black cat climbed the green tree";

say substr $str, 4, 5;                      # black

substr (位置计数)是从0开始的,所以偏移量为4的字符是'b'。

say substr $str, 4, -11;                    # black cat climbed the

第三个参数(长度)也可以是负数。 它指定了从原始字符串右边开始有多少个字符不包括在子串中。所以上面例子的意思是:返回从左边数4,右边数11,其中间的字符。

say substr $str, 14;                        # climbed the green tree

你也可以不使用第3个(长度)参数,这样的话就返回从第4个位置开始,一直到字符串结尾的所有字符。

say substr $str, -4;                        # tree
say substr $str, -4, 2;                     # tr

我们也可以用负数作为偏移量: 从右边数4个,并从第四个(包含)开始到结尾。等同于length($str)-4

替换字符串的一部分

最后一个例子有些麻烦。 目前为止,每个例子中substr都返回子串并保持原来的字符串不变。而在这个例子中,substr的返回值不变,但是它会改变原来字符串的内容!

substr()的返回值总是取决于前3个参数,但是在这个例子中substr有第4个参数,它(第4个参数)用来替换从原字符串选出的子串。

my $z = substr $str, 14, 7, "jumped from";
say $z;                                                     # climbed
say $str;                  # The black cat jumped from the green tree

substr $str, 14, 7, "jumped from" 返回单词 climbed,并且因为有第4个参数,所以改变了原始字符串。