エラー変数 $! は、数値コンテキストで使用するとシステム変数 error の値を返し、文字列コンテキストで使用すると perror() 関数(あるいは同様の関数)が返すエラー文字列を返します。
open FH, 'nonexistent';
my $code = 0 + $!;
print "Error code = $code\n";
print "Error msg = $!\n";
Error code = 2
Error msg = No such file or directory
0 + $val のように、数値演算子を使用します。