我将我的网站转移到另一台服务器上,这个错误发生了
PERL:在连接(.)中使用未初始化的值$ 2或在/Toolbox.pm第40行使用字符串.
功能 :
36 sub WT_filter{
37
38 my $filter = sub {
39 my $text_ref = shift;
40 $$text_ref =~ s/\[\%([^ ]+?)( .*)?\%\]/<TMPL_VAR NAME=\"$1\"$2>/g;
41 };
42
43 return $filter;
44
45 } #sub WT_filter
Run Code Online (Sandbox Code Playgroud)
谢谢 !
你有正则表达式/\[\%([^ ]+?)( .*)?\%\]/.或写得更可读:
/
\[\%
( [^ ]+? ) # $1
( [ ].* )? # $2
\%\]
/x
Run Code Online (Sandbox Code Playgroud)
您可能会注意到$2-group是完全可选的.如果模式$2不匹配,则将其设置为undef.如果变量名和结束符之间至少有一个空格,则不匹配%]:[%foo-bar%].
可能的方案包括:
更改模式,$2以便它也接受零长度字符串:( .* )
使用$2插值前的默认值:
s{\[\%([^ ]+?)( .*)?\%\]}{qq[<TMPL_VAR NAME="$1"] . ($2 // q[]) . q[>]}eg
Run Code Online (Sandbox Code Playgroud)
(仅从perl 5.10开始工作)
在过滤器范围内关闭此警告:no warnings'uninitialized';.
请注意,您的替换机制容易受到XML注入的影响,并且当变量[% … %]块在多行上延伸时,或者当两个变量在同一行上时会出现问题.假设escape()转义一些数据以便在XML中安全使用,那么以下内容应该有效:
s{
\[%
(\S+?) # $1 is a sequence of non-space characters
(?: \s+ ["]([^"]+)["] )? # $2 is anything inside double quotes
%\]
}{
(defined $2)
? (sprintf q[<TMPL_VAR NAME="%s" "%s">], escape($1), escape($2))
: (sprintf q[<TMPL_VAR NAME="%s">], escape($1))
}gsex
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |