リストの差分集合

Rubyの場合,-演算子で差分集合を得られるが,Perlにはそういうものがないっぽい.ウェブを軽く調べてもなかった.
おそらく以下の事情

  • 普段あまり使わない
  • 使うような玄人はわざわざ日記等に書かない

というわけで書いてみた.もっと速く動作し,もっと簡潔に書く方法をご存知の方がいればコメントを残して行ってくださいまし.

# return listA - listB
sub get_difference_set{
  my ($listA_ref, $listB_ref) = @_;

  # create hash to check if listB has the item
  my %listB_hash = map { $_ => 1 } @$listB_ref;

  # if listB does NOT have the itme, add into new list
  my @difference_set = grep { !$listB_hash{$_} } @$listA_ref;

  return \@difference_set;
}