Perl Hash:Can not keep hash data in the same order that it was inserted

Can Someone explain me why even using Tie::IxHash I can not get the output data in the same order that it was inserted? See code below.

#!/usr/bin/perl
use warnings;
use Tie::IxHash;
use strict;

tie (my %programs, "Tie::IxHash");

while (my $line = <DATA>) {
    chomp $line;
    my( $company, $site, $program, $product, $price) = split('--', $line);
    push @{ $programs{$program}{$product} }, $price;
}

for my $program (keys %programs) {
    print "$program\n";
    print "list of products: ", join(", ", keys %{$programs{$program}}), "\n";
    print "list of prices: ",
          join(", ", map { @{$programs{$program}{$_}} } keys %{$programs{$program}}), "\n";
}

__DATA__
COMPANY1--SITE1--PROGRAM1--PRODUCT1--PRICE1
COMPANY1--SITE1--PROGRAM2--PRODUCT1--PRICE1
COMPANY1--SITE1--PROGRAM1--PRODUCT2--PRICE3
COMPANY2--SITE1--PROGRAM1--PRODUCT1--PRICE2

It seems it does work.
or can you explain what you expect for the result exactly?