解释perl中3种不同风格的字符串eval

时间:2016-12-21 17:43:04

标签: perl

我不理解Perl文档中有关3种不同字符串eval类型的解释。如果文档丢失,文档缺失,那么句子的开头并不适合它的结尾,这对文档没有帮助没有帮助。

这三种口味是

  1. 需要@echo off set CONFIG_FILE=./some.properties set DEFCONFIG_FILE=./more.properties set EDA_ARGS=-config %CONFIG_FILE% -defaultconfig %DEFCONFIG_FILE% set JAVA_ARGS=-Xmx256M set BOOTCLASSPATH=../lib/1.jar;../lib/2.jar;../lib/3.jar;../4.jar;../5.jar :run_erp java -Xbootclasspath/p:%BOOTCLASSPATH% %JAVA_ARGS% -jar ../lib/RUNME.jar %EDA_ARGS% goto end :end 才能使用,或use feature qw( eval_bytes );

1 个答案:

答案 0 :(得分:6)

use feature qw( unicode_eval )可以解决令人困惑的怪癖与eval混淆,但如果不破坏向后兼容性,则无法修复。

  

eval的行为有所不同,具体取决于字符串的内部编码,有时将其参数视为字符串,有时也将其视为字符串。

     

在eval中激活的源过滤器会泄漏到当前正在编译的文件范围内。

use feature qw( unicode_eval )这会改变。现在eval将始终将其代码视为字符(即UTF-8)并且不会泄漏。这很可能是你想要的行为。

对于那些真的,真的想要被解释为字节(即ASCII)的代码有evalbytes,但你可能不需要它。

tl; dr :如果您使用的是5.16或更新版本且您正在使用eval(您可能不应该这样做),{{ 1}}和use feature qw( unicode_eval )。它支持UTF-8并修复了eval怪癖。

或只是use utf8::all而忘了它。