G'day Dr Manhattan,
Your requirements are ambiguous. Do you want to delete spaces from the end ("I want to delete all the spaces at the end of each element.") or do you want to delete all spaces ("The element should only consist of characters, no spaces at all.")? If the former, then substitution with s/// (as shown by hdb) is a good option; if the latter, then transliteration with y/// might be better.
$ perl -Mstrict -Mwarnings -E '
my %original_hash = (
none => "abc",
start => " abc",
middle => "a b c",
end => "abc ",
both => " abc ",
multi => " a b c ",
);
say "Data with assorted spaces:";
say "$_\t|$original_hash{$_}|" for keys %original_hash;
say "Data with no spaces at the end:";
my %no_spaces_at_end = %original_hash;
$no_spaces_at_end{$_} =~ s/\s*$// for keys %no_spaces_at_end;
say "$_\t|$no_spaces_at_end{$_}|" for keys %no_spaces_at_end;
say "Data with no spaces at all:";
my %no_spaces_at_all = %original_hash;
$no_spaces_at_all{$_} =~ y/ //d for keys %no_spaces_at_all;
say "$_\t|$no_spaces_at_all{$_}|" for keys %no_spaces_at_all;
'
Data with assorted spaces:
middle |a b c|
none |abc|
both | abc |
multi | a b c |
end |abc |
start | abc|
Data with no spaces at the end:
middle |a b c|
none |abc|
both | abc|
multi | a b c|
start | abc|
end |abc|
Data with no spaces at all:
middle |abc|
none |abc|
both |abc|
multi |abc|
start |abc|
end |abc|
|