以下 grep 函数如何工作(什么作用!/0o1Iil]/
do? )
@chars = grep !/0o1Iil]/, 0..9, "A".."Z", "a".."z";
use Data::Dumper;
print Dumper @chars;
在@chars中生成以下内容?
$VAR1 = 0;
$VAR2 = 1;
$VAR3 = 2;
$VAR4 = 3;
$VAR5 = 4;
$VAR6 = 5;
$VAR7 = 6;
$VAR8 = 7;
$VAR9 = 8;
$VAR10 = 9;
$VAR11 = 'A';
$VAR12 = 'B';
$VAR13 = 'C';
$VAR14 = 'D';
$VAR15 = 'E';
$VAR16 = 'F';
$VAR17 = 'G';
$VAR18 = 'H';
$VAR19 = 'I';
$VAR20 = 'J';
$VAR21 = 'K';
$VAR22 = 'L';
$VAR23 = 'M';
$VAR24 = 'N';
$VAR25 = 'O';
$VAR26 = 'P';
$VAR27 = 'Q';
$VAR28 = 'R';
$VAR29 = 'S';
$VAR30 = 'T';
$VAR31 = 'U';
$VAR32 = 'V';
$VAR33 = 'W';
$VAR34 = 'X';
$VAR35 = 'Y';
$VAR36 = 'Z';
$VAR37 = 'a';
$VAR38 = 'b';
$VAR39 = 'c';
$VAR40 = 'd';
$VAR41 = 'e';
$VAR42 = 'f';
$VAR43 = 'g';
$VAR44 = 'h';
$VAR45 = 'i';
$VAR46 = 'j';
$VAR47 = 'k';
$VAR48 = 'l';
$VAR49 = 'm';
$VAR50 = 'n';
$VAR51 = 'o';
$VAR52 = 'p';
$VAR53 = 'q';
$VAR54 = 'r';
$VAR55 = 's';
$VAR56 = 't';
$VAR57 = 'u';
$VAR58 = 'v';
$VAR59 = 'w';
$VAR60 = 'x';
$VAR61 = 'y';
$VAR62 = 'z';
这是grep perldoc http://perldoc.perl.org/functions/grep.html。您的示例中的语句使用的是grep EXPR,LIST
语法,这意味着任何 Perl 表达式都可以代替EXPR
.
grep 获取提供给它的列表,并仅返回 EXPR 为 true 的项目。
在这种情况下 EXPR 是! /0o1Iil]/
(为便于阅读而添加空格)这意味着“该项目是not由正则表达式匹配/0o1Iil]/
。由于这些项目都不与该正则表达式匹配(它们都不包含字符串0o1Iil]
)全部被退回。
正如其他海报所提到的,正则表达式可能应该是/[0o1Iil]/
,这将删除可能混淆的字符,例如0 和 o,1 和 I。这听起来对于密码或序列号等很有用。
顺便说一句,您可以将 grep 重写为更清晰的 BLOCK 形式,并使 LIST 构造明确:
@chars = grep { ! /[0o1Iil]/ } (0..9, 'A'..'Z', 'a'..'z');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)