There are a couple things for you to look into:
Net::Telnet::Cisco since it looks like a Cisco machine you are trying to login to.Also the $ts->login() method in Net::TelnetAlso look into the dumplog method in Net::Telnet It will show you what you are sending and recieving to the device.
Updated after pondering the real question
Oh yeah, the reason the device name is in the array is because it is part of the output you get before the prompt is matched. If your device is Cisco7000 your prompt is Cisco7000#, your code looks for the # in the prompt. So when you do a command you will get Cisco7000# sho run <CR> <-- This is where the data in the array starts
output...blahblahblah
Cisco7000#
^ this is where the data in the array stops
So you see, you get everything between the <CR> and the last # symbol, INCLUDING the hostname part of the new prompt.
The easiest solution is to ignore the last element of the array. The best solution is to incorperate the name of the device into the prompt string you are looking for, but you will need to watch for case sensitivity, since you pass the name of the device to the subroutine anyway, you can just change the prompt line to $telnetsession->prompt('/$devicename[#|>]/');. Note: this regex untested, you probably need to tweak it
"Nothing is sure but death and taxes" I say combine the two and its death to all taxes!