If you know which array contains the other
my @small = 10..12;
my @large = 10..15;
my %ref = map { $_ => 1 } @small;
my @diff = grep { not exists $ref{$_} } @large;
Not quite one line but efficient.
If it's not known which contains the other then one has to do it both ways.
And then there are various modules for array/list manipulation that can help.
For one, get_complement
from List::Compare does precisely what is needed.
What you have can be done in one statement, using List::Util
use List::Util qw(none);
my @diff = grep { my $e = $_; none { $e eq $_ } @small } @large;
but this has O(NM-M2/2) complexity, where N (large) and M (small) are array sizes.