原帖由 bestnet009 于 2009-7-28 21:19 发表
程序还是执行不了, 显示的错误报告是:
Use of uninitialized value $3 in concatenation (.) or string at Untitled line 4.
Use of uninitialized value $2 in concatenation (.) or string at Untitled l ...
原帖由 bestnet009 于 2009-7-28 00:37 发表
为什么上面的程序程序改成下面的(红色部份), 就不能执行了?
#!/usr/bin/perl
$aa = "<a>asfsafasdfsa<c>";
$ab = "(<a>)(.*)(<c>)";
$cc = "$3$2$1";
原帖由 linuxty 于 2009-7-29 09:49 发表
replacement的分隔符是单引号时,作为单引号字符串,不会进行变量赋值.
/e修饰符是不是也要要求replacement不是单引号字符串 ?
原帖由 linuxty 于 2009-7-29 10:05 发表
/ee 是对求值的结果再求值,在这就是对 $c 替换成 $1$2$3 后再替换成匹配的值.
$c='$1$2$3' $c='$1.$2.$3' $c='"$1$2$3"' 3种方式.
为什么第1种不能替换,而2和3种可以替换也?
原帖由 linuxty 于 2009-7-29 10:05 发表
/ee 是对求值的结果再求值,在这就是对 $c 替换成 $1$2$3 后再替换成匹配的值.
$c='$1$2$3' $c='$1.$2.$3' $c='"$1$2$3"' 3种方式.
为什么第1种不能替换,而2和3种可以替换也?
原帖由 MMMIX 于 2009-7-29 10:28 发表
其实这个错误信息已经说得很明白了。
最后执行的实际是 eval $1$2$3, 那么这里的 $1$2$3 是什么意思呢?它不在字符串中,所以不存在插值,因此 perl 将它理解为一个 expression,那么就需要 operator,找不 ...
原帖由 MMMIX 于 2009-7-29 11:28 发表
这里有个类似的帖子,可以看下:
http://bbs3.chinaunix.net/viewthread.php?tid=1507269
原帖由 MMMIX 于 2009-7-29 14:10 发表
eval { $1$2$3 } 固然和 eval '$1$2$3' 一样,但它们的结果不是字符串 $1$2$3, 而是把 $1$2$3 作为 expression 求值(eval)后的结果。事实上,这是第二个 /e 执行的东西。
就像 $c='$1', $c的值不就是 一个 $ 和一个 1组成的字符串吗?
就像 $c='$1', $c的值不就是 一个 $ 和一个 1组成的字符串吗?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |