正则表达式 – Perl替代操作符是做什么的?
我已经在Perl中编程了,多年以来,尽管只是偶然的是我的主要语言.因为我经常去几个月没有写任何perl,我严重依赖我的狗耳朵的骆驼书,提醒我如何做的事情.但是,当我无意识地复制食谱时,这使我烦恼.这是最令人烦恼的一个:在第三版骆驼的第154页,有一个例子,“修改string en passant,其内容如下所示:
($lotr = $hobbit) =~ s/Bilbo/Frodo/g; Q1)这里发生了什么?正是这个正则表达式正在运行? Q2)这种基本操作是否需要这种近似魔法的语法,“从$a取一个字符串,用正则表达式修改它,将结果放在$b”? Q3)如何使用循环默认变量作为初始字符串进行此操作? 对于上述看似完美自然的Perl梦想家,提前道歉.
嗯…($lotr = $hobbit)=?s / Bilbo / Frodo / g是Perl的众多魔术之一.现在给一些答案.
Q1)$lotr正在分配$hobbit中包含的值.分配后,我们可以忘记源变量.对待($lotr = $hobbit),因为它是自己的声明,如果我们写的: $lotr = $hobbit; $lotr =~ s/Bilbo/Frodo/g; 代替.正则表达式在$lotr上运行. Q2)语法只是上面给出的代码段的一行版本.将它视为“将字符串从$a复制到$b,并使用正则表达式修改$b”而不是“从$a取一个字符串,将结果放在$b” Q3)我假设你的意思是默认模式搜索空间“循环默认变量”?在这种情况下,只需使用$_而不是$hobbit: while (<>) { chomp; ($lotr = $_) =~ s/Bilbo/Frodo/g; print "$lotr = [$lotr]n"; print "$_ = [$_]n"; } 有趣的是,这个操作没有修改魔术var $_.这是你如何得出结论,赋值发生在正则表达式替换之前,并且替换不以任何方式在默认模式空间上进行交互. 对于经验丰富的Perl程序员来说,我不知道有太多的Perl语法被抛出来,而不管他们盯着Schwartz先生呢?) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |