在 Perl 中迭代哈希中按相同值分组的键

Iterate over keys grouped by same value in hash in Perl

我有一个问题。 我的问题可能很愚蠢,但已经晚了,我已经筋疲力尽了。我只使用一个包含唯一键(当然)和一个值的散列(一维)。但是有些键具有相同的值。我想遍历具有相同值的分组键,但我很费力;好吧,我需要值和键。但是我的代码重叠了,我按值拥有所有键,而我希望所有键都具有一个特定值。 键包含字符串,值是来自的文件。 我想要这样的输出: 为了简化,我现在有所有项目(键)按值(文件名)。 我想要一个文件中的所有项目,另一个文件中的其他项目,并且不要一次又一次地循环。我不知道如何阐明循环遍历值和在该值内,用该值在每个键上循环。这是我的代码:

    sub write_items_file{

        open my $output, ">:encoding(utf-8)", "bao1_regex_file.xml" or die "$!";
        my $global_counter = 1;
        my @values =uniq(values %$items_file);
        foreach my $value(@values){
            print $output "<file = \"$value\">\n";
            my @keys = grep {$items_file->{$_} == $value} keys %$items_file;
            foreach my $key(@keys){
                print("$key\n");
                my @t_d = split /\|\|/, $key;
                # on écrit les données dans le fichier xml de sortie avec le nom du fichier associé pour chaque item
                print $output "<item numero=\"$global_counter\" date=\"$t_d[2]\">\n<titre>$t_d[0]</titre>\n";
                print $output "<description>$t_d[1]</description>\n</item>\n";
                $global_counter++;
            }
            print $output "</file>\n";
        }

        close $output;
    }

我想要以下输出:

<file = "2020/06/01/19-36-00/0,2-3476,1-0,0.xml">
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="2" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="3" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="4" date="20200607">
</file>

<file = "otherfile.xml">

<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
</file>
<file = "an other file.xml">
<item numero="5" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="6" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="7" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
</file>

但是我有

<file = "2020/06/01/19-36-00/0,2-3476,1-0,0.xml">
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="2" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="3" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="4" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="5" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="6" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="7" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="2" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="3" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="4" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="5" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="6" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="7" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="8" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="9" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="10" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="11" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="12" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="13" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
</file>

<file = "other file.xml">

<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="2" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="3" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="4" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="5" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="6" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="7" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="2" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="3" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="4" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="5" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="6" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="7" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
<item numero="1" date="20200601">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="8" date="20200603">
<titre>Joao Nicolau : « Ce qui guide mon travail c’est le plaisir ».</titre>
<description>Dans « Technoboss », le réalisateur portugais Joao Nicolau montre que « le vieillissement n’est pas un mal inexorable ».</description>
</item>
<item numero="9" date="20200618">
<titre>La Cinémathèque française propose trois œuvres de jeunesse de Jean-Claude Brisseau.</titre>
<description>Les amateurs peuvent découvrir trois moyens-métrages inédits du cinéaste, tournés entre 1966 et 1968, sur la plate-forme de l’institution culturelle.</description>
</item>
<item numero="10" date="20200607">
<titre>Jeux, set et films : dix longs-métrages sur le monde du tennis pour attendre Roland-Garros.</titre>
<description>En attendant la réouverture des salles de cinéma, le 22 juin, le service Culture du « Monde » propose chaque semaine une sélection de films à regarder sur les plates-formes ou en replay.</description>
<item numero="11" date="20200602">
<titre>Michel Piccoli à propos de ses réalisateurs : « J’ai souvent été un double ».</titre>
<description>L’acteur à la filmographie prestigieuse, mort le 12 mai 2020 à l’âge de 94 ans, s’est régulièrement confié dans les pages du « Monde » au sujet des réalisateurs qui ont émaillé sa carrière. Extraits.</description>
</item>
<item numero="12" date="20200605">
<titre>A défaut de palmarès, Cannes décerne son label à 56 films.</titre>
<description>Privés de Festival en raison de l’épidémie due au Covid-19, les organisateurs ont néanmoins établi une Sélection officielle parmi les quelque 2 067 longs-métrages qu’ils ont visionnés.</description>
</item>
<item numero="13" date="20200627">
<titre>A Paris, le cinéma Le Louxor se déconfine.</titre>
<description>Après cent jours de fermeture, le mythique cinéma a rouvert ses portes, avec de nouvelles mesures de sécurité. La photographe Sophie Garcia a assisté aux préparatifs et aux premières séances de projection.</description>
</item>
</file>

您混淆了 ==eq。您的哈希值是

这样的字符串
2020/06/01/19-36-00/0,2-3476,1-0,0.xml
other file.xml

==是数字比较运算符,eq是字符串比较运算符。你想说

my @keys = grep {$items_file->{$_} eq $value} keys %$items_file;