in reply to Executing a external command

For historical (UNIX) reasons the exit code is shifted, to get the correct return code shift right by 8 bits:
print $cmd >> 8
The number 65280 translates to 255, or -1 (a signed byte, honest). Most likely it cannot run the function dir.
That should work under Windows NT/2000/XP, however you did say that you were running DOS. This might sound pedantic, but DOS is an old 16-bit operating system that used command.com, and dir was a built-in. If so you need to invoke command.com.
However, it would be better to use Perl instead, why not:
print join ("\n", glob('*'));

You can get file details using stat.