Chinaunix首页 | 论坛 | 博客
  • 博客访问: 978273
  • 博文数量: 184
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 1532
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-27 18:32
文章分类

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2007-01-16 16:50:11

2.6.3 选择自己的引号
尽管我们认为引起是文本值,但在 Perl 里他们的作用更象操作符,提供了多种多样的代换和模式匹配功能。Perl 为这些操作提供了常用的引起字符,还提供了更通用的客户化方法,让你可以为上面任意操作选择你自己的引起字符。在表2-3里,任意非字母数字,非空白分隔符都可以放在 / 的位置。(新行和空格字符不再允许做分隔符了,尽管老版本的 Perl 曾经一度允许这么做。)

表2-3。引起构造

常用 通用 含义 替换
' ' q// 文本字串
" " qq// 文本字串
` ` qx// 执行命令
() qw// 单词数组
// m// 模式匹配
s/// s/// 模式替换
y/// tr/// 字符转换
" " qr// 正则表达式

这里的有些东西只是构成“语法调味剂”,以避免你在引起字串里输入太多的反斜杠,尤其是在模式匹配里,在那里,普通斜杠和反斜杠很容易混在一起。

如果你选用单引号做分隔符,那么不会出现变量代换,甚至那些正常状态需要代换的构造也不发生代换。如果起始分隔符是一个起始圆括弧,花括弧,方括弧,那么终止分隔符就是对应终止字符。(嵌入的分隔符必须成对出现。)比如:

   $single = q!I said, "You said, 'she sad it.'"!;

   $double =qq(can't we get some "good" $variable?);

   $chunk_of_code = q {
      if ($condition) {
         print "Gotcha!";
      }
   };

最后一个例子表明,你可以在引起声明字符和其起始包围字符之间使用空白。对于象s///和tr///这样的两元素构造而言,如果第一对引起是括弧对,那第二部分获取自己的引起字符。实际上,第二部分不必与第一对一样。所以你可以用象s(bar)或者 tr(a-f)[A-f]这样的东西。因为在两个内部的引起字符之间允许使用空白,所以你可以把上面最后一个例子写做:

   tr (a-f)
   [A-F];

不过,如果用 # 做为引起字符,就不允许出现空白。q#foo# 被分析为字串 'foo',而 q #foo# 引起操作符 q 后面跟着一个注释。其分隔符将从下一行获取。在两个元素的构造中间也可以出现注释,允许你这样写:

   s{foo}   # 把 foo
    {bar}   # 换为 bar。

   tr [a-f]   # 把小写十六进制
      [A-F];   # 换为大写
阅读(1728) | 评论(0) | 转发(0) |
0

上一篇:VIM进阶索引::高亮

下一篇:请问${1+

给主人留下些什么吧!~~