($a, $b)の$bって意味ない気が。

@x = split / /;
$a = $x[0];
$b = $x[1];
を
($a, $b) = (split / /);

@x = split / /;
$a = $x[0]
を
$a = (split / /)[0];

とか、でしょ?