Aside from the previous suggestions regarding opening file internal to perl, AFAIC, you had the original re-direction wrong - it should've been
>&, instead of the
&> - that would run the dd(1) command in the background, totally ignoring the
& ... which is why the
2>/dev/null, worked for you (twas the right way round).
If you want to ignore all output i.e. STDOUT _&_ STDERR, then use >/dev/null 2>&1
A user level that continues to overstate my experience :-))