http://www.perlmonks.org?node_id=180889


in reply to exit the loop corrected

while ( $theSubBuild ne 'sci.bld' || 'esel.bld')
is equivalent to
while ( $x ne 'ya' || 1 )

I assume you meant for the loop to stop if $theSubBuild is equal to either of your strings. What Perl is doing is seeing if either of the expressions on both sides of the || are true. 'esel.bld' will always be true.

What you probably want is:
while ( $theSubBuild ne 'sci.bld' && $theSubBuild ne 'esel.bld')

Update: Fixed a bit of spelling and added comments since I was editing anyways.

I'm uneasy about the grep system call into a file and then reopening the file. I'd rather just read from a pipe if I was going to use the system grep through a bunch of files.

I tend to just read the files and get my info that way and leave the OS out of it.