我有一个像这样的数组:
my @array = qw( zero one two three four five six seven eigth nine);
Run Code Online (Sandbox Code Playgroud)
如何从 @array 输出由长度为 4 的字符串组成的子数组。例如,如果字符串等于 4,则新数组将输出为@subarray = ( zero four five nine )
内置函数grep充当 Perl 中的“过滤”操作,能够基于正则表达式或任意块过滤列表。
如果给定一个块,grep将为列表的每个元素调用该块,将隐式变量设置$_为当前值。它将保留返回真值的值。所以你的过滤器看起来像
my @subarray = grep { length == 4 } @array;
Run Code Online (Sandbox Code Playgroud)
length与许多内置 Perl 函数一样,可以接受参数(length($a)等),但在没有参数的情况下调用时,它会自动将隐式变量作为$_参数。
您还可以向其传递正则表达式。如果您担心同事太喜欢您并想树敌,这将非常有用。
my @subarray = grep(/^.{4}$/, @array);
Run Code Online (Sandbox Code Playgroud)