在perl中计算转义序列
我正在从文件中读取字符串。这些字符串包含转义序列,我希望在进一步处理它们之前对其进行评估。因此,我:在perl中计算转义序列,perl,Perl,我正在从文件中读取字符串。这些字符串包含转义序列,我希望在进一步处理它们之前对其进行评估。因此,我: $t = eval("\"$t\""); 这很好用。但我对表演有点怀疑。如果eval每次都要分叉一个perl进程,那么它将是一个性能杀手。我考虑过的另一种方法是regex,在这里我发现了一些相关的问题 我的问题是:有没有更好、更有效的方法 编辑:在我的示例中调用eval之前,$t包含\064\065\x20a\n。它被评估为45a哦,gah不要为此使用eval,如果有人向它提供诸如“系统('s
$t = eval("\"$t\"");
这很好用。但我对表演有点怀疑。如果eval每次都要分叉一个perl进程,那么它将是一个性能杀手。我考虑过的另一种方法是regex,在这里我发现了一些相关的问题
我的问题是:有没有更好、更有效的方法
编辑:在我的示例中调用eval之前,$t包含
\064\065\x20a\n
。它被评估为45a
哦,gah不要为此使用eval,如果有人向它提供诸如“系统('sync;reboot');”之类的输入,这是危险的
但是,你可以这样做:
#!/usr/bin/perl
$string = 'foo\"ba\\\'r';
printf("%s\n", $string);
$string =~ s/\\([\"\'])/$1/g;
printf("%s\n", $string);
哦,gah,不要为此使用eval,如果有人向它提供“系统('sync;reboot');”之类的输入,这是很危险的 但是,你可以这样做:
#!/usr/bin/perl
$string = 'foo\"ba\\\'r';
printf("%s\n", $string);
$string =~ s/\\([\"\'])/$1/g;
printf("%s\n", $string);
在转到
eval
之前,不太清楚文件中的字符串是什么样子,以及您对它们做了什么。解释中缺少了一些东西
如果您只是想撤消C风格转义(也在Perl中使用),请使用:
如果文件中有类似Perl变量的占位符,您希望用值填充这些占位符,那么您就是在滥用
eval
作为穷人的模板引擎。使用不会产生运行任意代码的危险副作用的文件。在转到eval
之前,不太清楚文件中的字符串是什么样子以及您对它们做了什么。解释中缺少了一些东西
$string =~ s/\\([rnt'"\\])/"qq|\\$1|"/gee
如果您只是想撤消C风格转义(也在Perl中使用),请使用:
如果文件中有类似Perl变量的占位符,您希望用值填充这些占位符,那么您就是在滥用eval
作为穷人的模板引擎。使用不会产生运行任意代码的危险副作用的
$string =~ s/\\([rnt'"\\])/"qq|\\$1|"/gee
stringeval也可以解决这个问题,但它带来了大量的安全和维护问题,比如string中的@
string eval也可以解决这个问题,但它带来了大量的安全和维护问题,比如@in string,这将是性能杀手。幸运的是,
eval
不会在每次调用perl进程时都派生它。这将是一个性能杀手。幸运的是,eval
并没有在每次调用它时都派生一个perl进程。我承认使用eval可能是危险的,但在我的例子中,我不能让它错误地工作。你有一个会引发问题的例子吗?我承认使用eval可能是危险的,但在我的情况下,以你的例子,我不能让它工作错误。你有没有引发问题的例子?