in reply to Re^2: Manipulating Arrays
in thread Manipulating Arrays

Tie::File will solve your problem of keeping a file and an array in sync. But you could also just write out the new array at the end of your program, instead of rewriting the file every time. delete does not what you think it does.

If you're waiting for a file *END*.txt to appear, you should sleep to give the other program some CPU to do its work.

I'm not sure why or where you have an inner and an outer @array_LAST_MOD_FILE, but I think the main problem of your loop is that delete does not do what you think it does. Removing elements from a list while iterating over that list is always problematic, so I would avoid that in your place and instead create a new list of things to keep, and at the end replace the old list with the new list. This approach works with both, the C-style loop and the foreach-style.

Replies are listed 'Best First'.
Re^4: Manipulating Arrays
by shekarkcb (Beadle) on Jun 12, 2009 at 11:27 UTC
    Hi All

    Thank you all for your help. I found out a way thereby i need not to play around with array but a simple variable (scalar) will give out my results. Here is how i proceeded. i just added a tag '<entry>' around my file entries and matching the same in while.

    open(F,"FILE_LAT_MOD_DIR") or die $!; @array_LAST_MOD_FILE=<F>; close(F); my $str_file=join("",@array_LAST_MOD_FILE); while($str_file =~ m/<entry>(.*?)<\/entry>/i) { my $match=$1; chomp($match); my @arr_find=`find \"$match\" -iname *END*.txt -type f +`; my $length=@arr_find; print "LENGTH OF THE ARRAY=$length|\n"; if($length eq 0) { sleep(1); next; } else { print "SEEMS for |$match| END.txt PRESENT....D +eleting from string..\n"; $str_file=~s/<entry>$match<\/entry>//is; } }

    Anyway thanks once again for you guys help.Hence closing the post
    Thanks,
    ShekarKCB.