gpt4 book ai didi

perl - 使用 List::MoreUtils::firstidx 的问题

转载 作者:行者123 更新时间:2023-12-04 17:19:33 25 4
gpt4 key购买 nike

我正在尝试使用 List::MoreUtils 方法。但是,在某些情况下需要清楚地了解它的用法。

如果它可以与 map 一起使用,请告诉我。例如:

#!/usr/bin/perl

use strict;
use warnings;
use List::Util;
use List::MoreUtils;
use Data::Dumper;


my @udData1 = qw(WILL SMITH TOMMY LEE JONES);

my @arr = qw(WILL TOMMY);
my %output = map{$_=>List::MoreUtils::firstidx{/$_/} @udData1} @arr;
print Dumper %output;
print List::MoreUtils::firstidx{/TOMMY/} @udData1;
print "\n";

输出:

$VAR1 = 'TOMMY';
$VAR2 = 0;
$VAR3 = 'WILL';
$VAR4 = 0;
2

据观察,我在使用 map 时没有正确获取值,但在后面的命令中使用时却没问题。我打算使用 $_ 作为 @arr 的一个元素。这可能是不正确的。所以,请给我一个替代方案。我必须使用 foreach 吗?

最佳答案

问题就在这里:

List::MoreUtils::firstidx{/$_/} @udData1

在这段代码中,您希望 $_ 是从 @arr 中获取的模式和从 @udData1 同时。 (请记住,firstidx{/TOMMY/} 表示 firstidx{$_ =~/TOMMY/},同样,firstidx{/$_/} 表示 firstidx{$_ =~/$_/}。)

实际发生的是 $_ 是来自 @udData1 的值(因为这是最内层的循环),您最终将其与自身进行匹配。因为它是一个简单的字母字符串,所以它总是匹配自身,并且 firstidx 正确返回 0。

这是一个使用临时词法变量的解决方案:

my %output = map{ my $p = $_;
$p => List::MoreUtils::firstidx{/$p/} @udData1 } @arr;

关于perl - 使用 List::MoreUtils::firstidx 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com