Perl兼容旧版本时,use if加载feature 'unicode_strings'的正确语法
解决Perl模块兼容旧版本并启用unicode_strings特性的问题
错误原因
你之前的写法use if $PERL_VERSION >= v5.12, "feature 'unicode_strings'";出错,是因为把模块名和特性名合并成了一个字符串。Perl会误以为要查找名为feature 'unicode_strings'.pm的模块文件,自然找不到,所以抛出Can't locate feature 'unicode_strings'.pm in @INC的错误。
正确语法
use if的标准格式是use if 条件判断, 模块名, 模块参数...,而use feature 'unicode_strings'本质是向feature编译指示传入参数unicode_strings,因此需要把模块名和参数分开传递:
use if $^V >= v5.12, 'feature', 'unicode_strings';
补充说明
$^V是Perl内置的版本变量,和$PERL_VERSION等价且无需额外导入,直接用来判断版本更便捷。- 如果你的模块需要兼容v5.10之前的版本(
$^V在v5.10及以后才可用),可以改用Config模块获取版本:
use Config; use if $Config{version} >= 5.012, 'feature', 'unicode_strings';
额外建议
如果你的模块最低兼容版本可以提升到v5.12,直接用use 5.012;会更简洁,它会自动启用包括unicode_strings在内的多个特性:
use 5.012;
内容的提问来源于stack exchange,提问作者FreonPSandoz
相关产品推荐
相关产品推荐

