Whilst my answer is longer, I think you will find it simulates a 7 segment display a little closer, and it has a larger, more readable font.
This one weighs in at 299 characters, excluding line breaks.
sub f{
$i=$_[0];$i=~s/(\d)\./$1|'@'/eg;@c=split//,"\brew\$]m.k{%\177o";
for$a(0..8){for$l(split//,$i){$x=ord$c[ord($l&"?")-45];print do{
if($a%4){$q=($x>>($a>4)*3)&6;($q&2?"|":" ")." ".($q&4?"|":" ")
." ";}else{($x>>($a>>2)*3&1?" ----- ":" "x7).
($a==8&&(($l&"@")eq"@")?" X ":" ");}}}print"\n";}}
f(-123.04);
f(56789);
And the output is:
----- -----
| | | | |
| | | | |
| | | | |
----- ----- ----- -----
| | | |
| | | |
| | | |
----- ----- X
----- ----- ----- ----- ----- -----
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
----- ----- ----- -----
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
----- ----- ----- ----- -----
Not bad for a first golf attempt? :-)