gpt4 book ai didi

arrays - 无法从 perl 哈希中删除键及其关联值

转载 作者:行者123 更新时间:2023-12-01 10:18:37 25 4
gpt4 key购买 nike

我正在用 perl 编写一个基本的歌曲管理程序,它通过使用一个模块允许用户将歌曲名称和歌曲时间对添加到哈希中,其中键是歌曲的名称,值是时间歌曲,它们都是弦乐。 addSong 运行良好,但 removeSong 没有。在 removeSong 中,我首先要检查传入的歌曲名称字符串是否作为键存在。如果输入与现有键匹配,则将其删除(连同其对应的值),如果不是,则子例程会发出错误消息。当我通过删除歌曲“Hello”来继续测试子例程时,我收到了我编程的错误消息,当输入与键不匹配并且我在哈希上使用 Data::Dumper 函数时,我可以看到我要删除的歌曲键仍在哈希中。

我使用这个stackoverflow链接寻求帮助:
How to remove keys from hash in Perl?

这是我的 test.pl 函数的代码:

use warnings;
use FindBin;
use lib $FindBin::Bin;
use SongList;
use strict;

SongList::addSong("Hello", "5.23");
SongList::addSong("all my heros are cornballs", "3:23");
SongList::addSong("Grimy Waifu", "2:55");
SongList::addSong("ptsd", "2:28");
SongList::removeSong("Hello");

这是我的 SongList.pm 模块的代码:
package SongList;
#DECLARE VARIABLES AS LOCALLY AS POSSIBLE TO PREVENT BUGS
use strict;
use warnings;
use Data::Dumper;
my %songhash;

my $songlisttitle;
sub addSong{#this works


my ($namesong, $timesong) = @_;
$songhash{$namesong}=$timesong;
print "success\n";
print Dumper(\%songhash);

}

sub removeSong{
my $namesong=@_;

print "removing song from list\n";
if(exists $songhash{$namesong}){
delete($songhash{$namesong})
}
else{
print "that song wasn't in the list anyways\n";
}
print Dumper(\%songhash);
}

最佳答案

这里:

sub removeSong{
my $namesong=@_;

您正在将数组分配给标量变量。这导致将数组的长度分配给标量(如果按预期传递了单个参数,这将是 1)。自键 1不存在于哈希中,您会收到错误消息。

你要:
my ($namesong) = @_;

或者:
my $namesong = shift;

引用: perldata :

If you evaluate an array in scalar context, it returns the length of the array.

关于arrays - 无法从 perl 哈希中删除键及其关联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403416/

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