我正在尝试对数组进行排序,这是哈希中的值。以下代码行:
sort @{ $hash{$item}{'lengths'} };
产生以下错误:
Useless use of sort in void context at ...
答案 0 :(得分:7)
在Perl中,sort
不会修改数组;它返回一个排序列表。您必须将该列表分配到某处(或者返回原始数组,或者其他地方)。
@{ $hash{$item}{'lengths'} } = sort @{ $hash{$item}{'lengths'} };
或者,(特别是如果数组深入嵌套哈希):
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort @$arrayref;
您的原始代码正在对数组进行排序,然后丢弃已排序的列表,这就是它产生该警告的原因。
注意:正如salva指出的那样,默认情况下sort
会进行字符串比较。您可能需要使用sort { $a <=> $b }
而非sort
进行数字排序:
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort { $a <=> $b } @$arrayref;
但这与您提出的警告信息无关。
答案 1 :(得分:3)
答案 2 :(得分:2)
另请注意,如果要对长度进行排序,则必须使用数字比较:
my $lengths = $hash{$item}{'lengths'};
@$lengths = sort { $a <=> $b } @$lengths;
答案 3 :(得分:-2)
我试过这样的事情
my %lrn_hash;
$lrn_hash{1} = 1;
@{$lrn_hash{1}{VALS}} = (6,7,1,5,7,9);
@narr = sort @{$lrn_hash{1}{VALS}};
print "@narr\n";
它工作正常,输出
1 5 6 7 7 9
您使用的是perl版本吗?