正则表达式

正则表达式

正则表达式
在perl语言编程上看到一个例子:
$_ = "I have 4 + 19 dollars an 8/2 cents.\n";
s{ (\d+ \s* [+*/-] \s* \d+) }{$1}eegx;

有点不明白,上面的例子中匹配到的$1 分别为 4 + 19 和 8/2,要将它们的运算结果作为替换值,不是只要一个e就可以了么??? 为啥需要两个啊?
谢谢!
Programming pe...
Programming perl (第三版,中文) 181页

在编译过程中,任何语法错误都会被检测到,而运行时异常则被忽略。在第一个/e后面每多一个e(如/ee,/eee等等)都等效于对生成的代码调用eval STRING ,每个/e相当于一次调用。这么做等于计算了代码表达式的结果并把异常俘获在$@中。
谢谢楼上的,你...
谢谢楼上的,你说的概念我也知道,就是我不明白上面的例子为什么要调用两次eval
匹配的那个反向引用 是数学表达式,分别是字符串 “4 + 19” 和 “8/2”,所以调用一次eval后,被替换域中应该已经是数字23和4了啊,为什么还要来一次e?
s{ (\d+ \s* [+*/-] \s* \d+) }{$1} = s{ (\d+ \s* [+*/-] \s* \d+) }{'4 + 19'} ->(e)s{ (\d+ \s* [+*/-] \s* \d+) }{23} 到这步应该已经可以替换数字了啊,为啥还要来一次 ->(e)???

不知道有没有表达清楚我的意思 。。。 :(