Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to get this script with this array to accept an entry that is not in the array and modify it. So if someone enters 'webpage3' it would accept it and the array would be appended to ('webpage1','webpage2','webpage3')
@data = ('webpage1','webpage2'); print "Web page needed: \n"; chomp($_ = <>); foreach $data (@data) { $hit = ($data =~ /$_/); if ($hit) { print "Web page number = $data.\n"; last; } } if (!$hit) { $data = pop(@data); print "$data\n"; }

Replies are listed 'Best First'.
Re: Appending an array
by boo_radley (Parson) on May 30, 2002 at 18:24 UTC
    push @data, 'webpage3' unless grep (/webpage3/ , @data); should be all you need. I'm curious, how did you know to use pop, but be unaware of push?
      I need it to accept anyword and add it to the array. If someone enters webpage45 it would add to array such as: ('webpage1','webpage2','webpage45')

      Then the next time the script is run someone enters page67 would then make the array look like this: ('webpage1','webpage2','webpage45','page67')

      Please help me make this happen in my script.

        boo_radley's method will work for anything (provided you use a variable instead of a literal 'webpage3'), except that you probably shouldn't use a regexp match as he did and just use eq instead, in case they, for example, type in 'webpage' (boo_radley's would match, and thus not add, even though it's technically different). Depends on how you want to handle those cases, though.

        #!/usr/bin/perl use warnings; use strict; our @data = qw(webpage1 webpage2); print "Webpage needed: "; # <STDIN> flushes output buffers chomp(my $response = <STDIN>); # <STDIN> instead of <> in case they # add command line arguments push @data, $response unless grep { $_ eq $response } @data; print "$_\n" for @data;

        (Update: Expounded upon why eq should probably be used instead of m//)

        bbfu
        Black flowers blossum
        Fearless on my breath
        Teardrops on the fire
        Fearless on my breath