根据当前数组索引检查另一个数组值的Perl脚本

根据当前数组索引检查另一个数组值的Perl脚本,perl,Perl,我正在处理一个perl赋值,它有三个数组-@array_a、@array_B和array_C,其中有一些值,我在数组a上搜索字符串“CAT”,并获取其索引 my @index = grep { $@array_A[$_] =~ 'CAT' } 0..$#array_A; print "Index : @index\n"; 产出:指数:2 5 我必须将其作为输入,检查索引2和5处其他两个数组的值,并将其打印到文件中。 诀窍是弦的位置——“猫”不同。(索引可能是5、7和9) 我不太明白这里

我正在处理一个perl赋值,它有三个数组-@array_a、@array_B和array_C,其中有一些值,我在数组a上搜索字符串“CAT”,并获取其索引

my @index = grep { $@array_A[$_] =~ 'CAT' } 0..$#array_A;
    print "Index : @index\n";
产出:指数:2 5

我必须将其作为输入,检查索引2和5处其他两个数组的值,并将其打印到文件中。 诀窍是弦的位置——“猫”不同。(索引可能是5、7和9)


我不太明白这里的逻辑,只是想寻求一些逻辑方面的帮助。

这里有一个过于详细的示例,说明如何提取所需的值,以显示发生了什么,同时希望为您留下一些空间,以便进一步调查。请注意,在使用
=~
时使用regex分隔符是惯用的Perl。例如:
$name=~/steve/

use warnings;
use strict;

my @a1 = qw(AT SAT CAT BAT MAT CAT SLAT);
my @a2 = qw(a b c d e f g);
my @a3 = qw(1 2 3 4 5 6 7);

# note the difference in the next line... no @ symbol...

my @indexes = grep { $a1[$_] =~ /CAT/ } 0..$#a1;

for my $index (@indexes){
    my $a2_value = $a2[$index];
    my $a3_value = $a3[$index];

    print "a1 index: $index\n" .
          "a2 value: $a2_value\n" .
          "a3 value: $a3_value\n" .
          "\n";
}
输出:

a1 index: 2
a2 value: c
a3 value: 3

a1 index: 5
a2 value: f
a3 value: 6

下面是一个过于冗长的示例,说明如何提取所需的值以显示正在发生的情况,同时希望为您留下进一步调查的空间。请注意,在使用
=~
时使用regex分隔符是惯用的Perl。例如:
$name=~/steve/

use warnings;
use strict;

my @a1 = qw(AT SAT CAT BAT MAT CAT SLAT);
my @a2 = qw(a b c d e f g);
my @a3 = qw(1 2 3 4 5 6 7);

# note the difference in the next line... no @ symbol...

my @indexes = grep { $a1[$_] =~ /CAT/ } 0..$#a1;

for my $index (@indexes){
    my $a2_value = $a2[$index];
    my $a3_value = $a3[$index];

    print "a1 index: $index\n" .
          "a2 value: $a2_value\n" .
          "a3 value: $a3_value\n" .
          "\n";
}
输出:

a1 index: 2
a2 value: c
a3 value: 3

a1 index: 5
a2 value: f
a3 value: 6

因此,您正试图根据
@array\u A
中找到的索引,通过索引从其他两个数组中获取值?@stevieb:是的,这是正确的。您不明白您的
my@index=…
行吗,或者您正在努力应用结果,
(2,5)
,要
@array\u B
@array\u C
?那么您正试图根据
@array\u A
中找到的索引,通过索引从其他两个数组中获取值?@stevieb:是的,这是正确的。您不明白您的
我的@index=…
行吗,或者您正在努力应用结果,
(2,5)
,对于
@array\u B
@array\u C
,不太详细的解决方案是
my@a2\u matches=@a2[@index]
我的@a3_匹配=@a3[@index]。它利用了,但你的解决方案更具教育意义。@PerlDog这就是我想要的,因为很明显OP是在做某种学校项目;)当然可以。我很感激,也喜欢你的解决方案。我刚刚添加了另一种方法。@stevieb:非常感谢您的输入。我能够获取数组b和数组C中的值,并将其写入文件,如下所示:
打开我的$fh,“>”、“log.txt”或“die”无法打开log.txt:$;foreach(@array_B,@array_C){print$fh“$\n”}close$fhO/P:
12345 67891 12333 john jack joy
如何以以下方式写入文件,
12345 john 67891 jack 12333 joy
不太详细的解决方案是
my@a2_matches=@a2[@index]
我的@a3_匹配=@a3[@index]。它利用了,但你的解决方案更具教育意义。@PerlDog这就是我想要的,因为很明显OP是在做某种学校项目;)当然可以。我很感激,也喜欢你的解决方案。我刚刚添加了另一种方法。@stevieb:非常感谢您的输入。我能够获取数组b和数组C中的值,并将其写入文件,如下所示:
打开我的$fh,“>”、“log.txt”或“die”无法打开log.txt:$;foreach(@array_B,@array_C){print$fh“$\n”}close$fhO/P:
12345 67891 12333 john jack joy
如何以以下方式写入文件,
12345 john 67891 jack 12333 joy