|Do you know where your variables are?|
Just a few comments focused on your code (in other words, don't take it personally).
Under many (most?) filesystems, once the number of files in a directory reaches a certain point, filesystem code starts to melt down.
There is also a limit on many filesystems for the length of a file name. Once you append the string 'poop' to a filename a few times (60ish, if your limit happens to be around 240), you will run into this limit.
$i == 0; does not do what you think it does.
I would recommend that you use strict; use warnings; at the top of your code. While not required, it can help to catch some common mistakes.
Are the two parts of your code related? It seems that the part before the user prompt is unrelated to the part after the prompt. Ideally, unrelated code should be broken into different units of concern (scripts, modules, subroutines, etc).
The sub hellofile within the else block does not do what it appears you think it does. The sub will be defined even if the else block does not get executed. sub declarations are not nested, and even if nested in other blocks, will be globally visible.
The indentation could use some work. The nesting does not make it easy to read.
Update (2012/12/12): Minor grammar tweaks.