You need to read the doco for curses(3) more carefully -
The function new_item allocates a new item and initializes it from the name and description pointers. Please notice that the item stores only the pointers to the name and description. Those pointers must be valid during the lifetime of the item. So you should be very carefull with names or descriptions allocated on the stack of some routines.
This explains why you are only getting the last item, item 2, in your menu. Afterall, perl Curses module is just a wrapper for the Curses library.