in reply to Not An Array reference

selectall_hashref() returns a hash reference not an array reference, and the value of each key is itself a hash reference, so you should access it like this:
while ( my ($key,$value) = each %$rows ) { my $name = $value->{name}; # ... }
The second argument to selectall_hashref() should be a column name (or number) or an array reference of column identifiers. Your code passes a hash reference { Slice => {} }. From what I can make out from the docs, the identifier given in the second argument needs to match a column in the statement (the first argument), so if there really is a column called 'Slice' in your database then it should be included in the statement. I would guess that is not the case so this is probably what you want:
my $hash_ref = $dbh->selectall_hashref('select id, name, price from pr +oducts', 'id' ); while ( my ($id,$value) = each %$hash_ref ) { my $name = $value->{name}; my $price = $value->{price}; # ... }