|
当使用split 时,模式指定了分离符:这一部分不是有用的数据。有时指定要保留的部分更容易。
在列表context 中使用模式匹配(m//)时,如果匹配成功返回值为内存变量值的列表;如果匹配失败则为空列表:
$_ =“Hello there, neighbor!”;
my($first, $second, $third) =/(\S+) (\S+), (\S+)/;
print “$second is my $third\n”;
这种方法使我们可以给这些匹配的变量以合适的名字,这些值不会由于下次模式匹配而被覆盖(由于代码中没有=~,模式会
自动(默认行为)和$_进行匹配)
在s///中介绍的/g 修饰符也可在m//中使用,它允许你在字符串中的多处进行匹配。在这里,由括号括起来的模式将在每一
次匹配成功时返回其内存中所存放的值:
my $text = “Fred dropped a 5 ton granite block on Mr. Slate”;
my @words = ($text =~ /([a-z]+)/ig);
print “Result: @words\n”;
#Result: Fred dropped a ton granite block on Mr slate
这同使用split 有些类似。这里不是指定我们要去掉的部分,而是指定我们要保留的部分。
如果有不止一对括号,每一次返回不止一个字符串。例如将字符串放入hash 中,如下:
my $data = “Barney Rubble Fred FlintstoneWilma Flintstone”;
my %last_name = ($data =~ / (\w+)\S+(\w+)/g);
每当模式匹配成功时,将返回一对值。这些一对一对的值就成了hash 中的key/value 对。 |
|