"Robert Valcourt" <> wrote:
> Hello,
>
> For some time I have been using two different method for removing an
> entry from an @rray. It is my beleif that these methods may be outdated
> or erroneous and I wanted to get some opinions. My program reads the
> contents of a text file, and places each line into the array. Here are my
> two methods:
>
> Using Splicing
> =========================
>
> open (ADDRESSES, "<addressbook.txt") or die "Can't open file: $!";
> @entries=<ADDRESSES>;
> close(ADDRESSES);
>
> $variable = "Smith";
>
> foreach $entry(@entries) {
> $location++;
> if ($entry eq $variable) {
> $location--;
> $line = $location;
> }
> }
>
> splice(@entries, $line, 1);
>
> First of all I understand that many of you will first comment on the
> means by which I read the text file and place its content into the array
> or that strict isnt used above, and I will be fixing that soon using
> SLURP and calling the "use strict" header.
>
> So this method uses the old splice routine.
Old? I prefer the term "mature". Anyway, is there any reason you
don't use a hash rather than an array? What happens if $variable doesn't
occur at all in the list?
> I find this method to be
> confusing and im not quite a fan of it. On to the next:
>
> Redefining the @array element inside to loop
> =========================
>
> open (ADDRESSES, "<addressbook.txt") or die "Can't open file: $!";
> @entries=<ADDRESSES>;
> close(ADDRESSES);
>
> $variable = "Smith";
>
> foreach $entry(@entries) {
> if ($entry eq $variable) {
> $entry = "";
> }
> }
>
> This method simply remodifies the $entry with a null value killing its
> data and the following \n inside the loop (at least I think it does).
This "removes" all matching entries, the first method removes only the last
one. But it sounds like you anticipate there will be exactly one match?
> Both of these methods do the trick but I have a feeling that neither may
> be the most efficient way
Is that really a concern?
> or worse these methods may have side effects
> that I am unaware of. Alot has changed in the world of Perl since I
> started using these methods and I wanted to know if there is a
> better/safer/more efficient way to do this.
grep
>
> I would also like to ask about terminating a loop ... obviously after a
> match is found I would want to terminate the loop so that it doesn't
> waste time checking all the other array elements for a match.
last
> Suprisingly
> I was not able to source this answer. I once read somewhere that a
> command called "return" or something is used, thoughts?
return can be used to break out of loops (as long as the loop is contained
in a subroutine call or other "return"able construct) but one should only
do that if your goal is both leave the loop and return from the outer
construct. If you just want to leave the loop, use last.
Xho
--
--------------------
http://NewsReader.Com/ --------------------
Usenet Newsgroup Service $9.95/Month 30GB