Array slicing of dynamic array

I am trying to slice an array, and include everything from a starting point.

bit [7:0] byte_array;
byte_array=new[50];

byte_array[4:$]; // error, 2nd expression must be a constant <-----
this is allowed for a queue.

I am using this in an unpacking routine where I use the first 4 bytes of an array, and then need to stream the rest to another location.

As you have discovered, that kind of open range syntax is only allowed for queue data types. You can either: change the type of byte_array to a queue, use a queue as an intermediate variable, or use the streaming operator to pack or unpack the array. {<<{FourByteVariable, AnotherLocation}} = byte_array;. I would need to see more of what you are attempting to do in order to recommend the best solution.