gpt4 book ai didi

perl - 关于 Perl 函数的三个问题

转载 作者:行者123 更新时间:2023-12-02 08:50:37 25 4
gpt4 key购买 nike

我正在尝试使用现有的 Perl 程序,其中包括以下函数 GetItems .下面列出了该函数的调用方式。

我对这个程序有几个问题:

  1. 什么是foreach my $ref (@_)目的是什么?我想@_应该和传递的参数有关,但不太确定。

  2. my @items = sort { $a <=> $b } keys %items;左侧的“项目”应该与右侧的“项目”不同?为什么他们使用相同的名字?

  3. $items{$items[$i]} = $i + 1; 是什么意思?目的是什么?看起来它只是设置了散列值 $items顺序。

$items = GetItems($classes, $pVectors, $nVectors, $uVectors);

######################################
sub GetItems
######################################

{
my $classes = shift;
my %items = ();
foreach my $ref (@_)
{
foreach my $id (keys %$ref)
{
foreach my $cui (keys %{$ref->{$id}}) { $items{$cui} = 1 }
}
}

my @items = sort { $a <=> $b } keys %items;

open(VAL, "> $classes.items");
for my $i (0 .. $#items)
{
print VAL "$items[$i]\n";
$items{$items[$i]} = $i + 1;
}
close VAL;
return \%items;
}

最佳答案

  1. 当您输入一个函数时,@_ 开始时是一个数组(别名),其中包含传递给该函数的所有参数;但是 my $classes = shift 删除了 @_ 的第一个元素并将其存储在变量 $classes 中,所以 foreach我的 $ref (@_) 遍历所有 剩余 参数,在 $ref 中一次存储(别名)它们。

  2. 标量、散列和数组都通过语法来区分,因此允许它们具有相同的名称。您可以同时拥有一个 $foo、一个 @foo 和一个 %foo,它们不必彼此之间的任何关系。 (这与 $foo[0] 引用 @foo$foo{'a'} 引用 %foo,给语言新手带来很多困惑;你不是唯一一个。)

  3. 没错。它将 %items 的每个元素设置为一个不同的整数,范围从 1 到元素的数量,按键按数字 (!) 顺序进行。

关于perl - 关于 Perl 函数的三个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8781745/

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