pack takes a bunch of bits and interprets them in whatever way you tell if to
That's what unpack does, as you demonstrated. pack, on the other hand, is very specific about what it takes.
Passing negative numbers where an unsigned one is expected currently performs a C cast, but it's undocumented behaviour.
Neither I nor Perl can see any difference
To see the difference between using 0xFFFF_FFFF and -1, you just had to substitute 0xFFFF_FFFF for -1 instead of writing an entirely new program. Try again.