The spaceship (<=>) returns 0 when the two items being compared are equal so use an or to fall back to a secondary comparison if the first compare finds a match.
use strict;
use warnings;
my @lines = <DATA>;
@lines = map {[/(\d+\.\d+)/g]} @lines;
@lines = sort {$a->[1] <=> $b->[1] or $a->[0] <=> $b->[0]} @lines;
print "@$_\n" for @lines;
__DATA__
48.1 0.4 99.0 0.5
1.0 0.2 99.0 0.3
1.0 0.1 99.0 0.2
1.0 0.3 99.0 0.4
1.0 0.5 99.0 0.6
13.1 0.6 99.0 0.7
5.0 0.4 48.0 0.5
1.0 0.6 13.0 0.7
Prints:
1.0 0.1 99.0 0.2
1.0 0.2 99.0 0.3
1.0 0.3 99.0 0.4
5.0 0.4 48.0 0.5
48.1 0.4 99.0 0.5
1.0 0.5 99.0 0.6
1.0 0.6 13.0 0.7
13.1 0.6 99.0 0.7
DWIM is Perl's answer to Gödel