With no change to the idiom, I'd write that as,
my %saw;
my @out = grep { ! $saw{$_}++ } @in;
Personally I prefer to use the "EXPR-form" of grep() if possible. But this largely depends on the case under examination: in some cases while it could be
possible to use that, still it is more terse to adopt the "BLOCK-form", as you did.
Definitely good point about my %saw; instead. But after all the snippet posted by the OP is too small to really understand wether he's using non-strict code or if he's reusing a previously used %saw (I wouldn't do that, FWIW) or...