If you use .* as "everything else", then be sure to use the /s modifier.
Beware of that if there is no digit in $file, then $sk won't change! This is bad. It would look like you need to change \d+ to \d*, but that would make it match "" at the beginning, and so $1 would be empty, thus erasing the whole string.
But this problem can be solved. By rewriting the pattern to a more natural (?) pattern we'll soon see the solution. First, your pattern can be rewritten to
The anchors are removed, as they're unnecessary. They're unnecessary in your pattern too. Anyhow, now we can change \d+ to \d*, and $sk will be empty if no number was matched. So the result is
(my $sk = $file) =~ s/\D*(\d*).*/$1/s;
But this still isn't fully analogous with
my ($sk) = $file =~ /(\d+)/;
since $sk will be the empty string in the former, and the undefined value in the latter. So in extraction situations I often stay away from that trick, and simply use the latter.