Как убрать запятую из последнего элемента хеша (из цикла)? Perl - PullRequest
1 голос
/ 16 сентября 2011

Давайте рассмотрим пример кода:

foreach my $cmp_id ( sort { $a <=> $b } keys %totals )
{
    print $cmp_id . ", ";
}

Как напечатать последний элемент хэша без запятой? И, если возможно, без строковых операций (подстрока или что-то подобное).

Спасибо

Ответы [ 2 ]

15 голосов
/ 16 сентября 2011

Если вам не нужно заниматься чем-то другим, вы проделаете очень долгий путь ...

print join(", ", sort { $a <=> $b } keys %totals);

join объединяет массив, используя разделитель, заданный в качестве первого аргумента, что идеально подходит для того, что вы ищете.

UPDATE

Мое решение работает, вам нужно предоставить больше информации в вашем вопросе.

Добавьте ключи в массив и распечатайте их, когда вы закончите, т. Е .:

my @keys;
foreach my $cmp_id (sort { $a <=> $b } keys %totals){
    push @keys, $cmp_id;
    ... other processing
}
print join(", ", @keys);
0 голосов
/ 16 сентября 2011

Хотя я предпочитаю исходное предложение RET, в худшем случае для удаления "," с конца строки дважды используйте команду chop.

Или substr: $ cmp_id = substr ($ cmp_id, 0, -2);

...