Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 警告:'\\';将在[]内按字面意思处理_Perl - Fatal编程技术网

Perl 警告:'\\';将在[]内按字面意思处理

Perl 警告:'\\';将在[]内按字面意思处理,perl,Perl,我的Perl代码包含以下行: use Math::Random::Secure qw /irand/; use String::Random; $c = String::Random->new(rand_gen => sub {return irand($_[0]);})->randregex('[\da-f]{32}'); 我收到了以下警告信息: “\\”将在[]内按字面意思处理 这意味着什么?我做错了什么?来自String::Random::randregex的文档:

我的Perl代码包含以下行:

use Math::Random::Secure qw /irand/;
use String::Random;

$c = String::Random->new(rand_gen => sub {return irand($_[0]);})->randregex('[\da-f]{32}');
我收到了以下警告信息:

“\\”将在[]内按字面意思处理


这意味着什么?我做错了什么?

来自String::Random::randregex的文档:

请注意,randregex的参数不是真正的正则参数 表达。只有一小部分正则表达式语法是可用的 实际上支持。。。。当前[]内的特殊字符不可用 支持


因此,用0-9替换\d可能是另一种解决方案,即完全避免String::Random。已使用的
irand
返回32位整数,因此可以使用以下命令:

my $c = unpack 'H*', pack 'L*', map irand, 1..4;

作为奖励,我认为这个解决方案会更快。

我假设正则表达式模式
[\da-f]{32}
被理解为
[\\da-f]{32}
而不是
[0-9a-f]{32}
@ikegami-基于(bug报告)我看到您对这个模块有一些经验,并且出现了类似的错误。为什么这个模块不接受标准的Perl正则表达式模式?为什么?Lasziness:)我怀疑作者会接受支持此功能的补丁。毕竟,S::R已经支持字符类之外的
\d
。请注意,
\d
是在那里定义的
[0-9]
(与Perl不同,Perl中它匹配580个不同的字符)。另外,这并不意味着你应该使用
(?:\d|[a-f])
而不是
[0-9a-f]
,因为这可能会有不同的频率分布。太好了!。我不会接受这个答案,因为它没有回答这个帖子的问题,但是你的解决方案解决了我的问题。非常感谢。