如何将"哈希数组"的所有元素作为数组传递给函数

Gla*_*ost 2 arrays perl hash loops perl-data-structures

如何将"哈希数组"元素作为数组传递给函数?

比方说,我想将所有$link->{text}数组作为数组传递给sort()函数.

#!/usr/bin/perl
use strict; use warnings;

my $field = <<EOS;
<a href="baboon.html">Baboon</a>
<a href="antelope.html">Antelope</a>
<a href="dog.html">dog</a>
<a href="cat.html">cat</a>
EOS

#/ this comment is to unconfuse the SO syntax highlighter. 
my @array_of_links;
while ($field =~ m{<a.*?href="(.*?)".*?>(.*?)</a>}g) {
    push @array_of_links, { url => $1, text => $2 };
}
for my $link (@array_of_links) {
    print qq("$link->{text}" goes to -> "$link->{url}"\n);
}
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 6

如果要按文本对链接进行排序,

my @sorted_links = sort { $a->{text} cmp $b->{text} } @array_of_links;
Run Code Online (Sandbox Code Playgroud)

如果你真的只想获取和排序文本,

my @text = sort map $_->{text}, @array_of_links;
Run Code Online (Sandbox Code Playgroud)

  • ysth:您可能希望在文本字段相同的情况下添加回退子句.我会做`sort {lc($ a - > {text})cmp lc($ b - > {text})|| $ a - > {url} cmp $ b - > {url}}`但很好地对齐. (3认同)