in reply to Re: Re: creating an array of names
in thread creating an array of names

If this is what you want to do then you could do any of these:

for my $i ( 0..11 ) { print "yes it's a month\n" if $month eq $monthnames[$i]; } for my $valid_months ( @monthnames ) { print "yes it's a month\n" if $month eq $valid_months; } print "Yes it's a month\n" if grep { $_ eq $month } @monthnames;

You would be better to use a hash as a lookup table like this:

my @months = qw( jan feb mar apr may jun jul aug sep oct nov dec); my %monthnames; # create lookup table $monthnames{$_}++ for @months; print "Yes it's a month!" if exists $monthnames{$month};

Warning

In your if($month = $array[i]){ statement you have used = which is the assignment operator when what you really wanted was eq the string equality operator. In perl we have:

$a = 1; # set $a to 1 $a == 1; # returns a true value if $a is numerically equal to 1 $a eq 'foo' # returns a true value if $a is equal to the string value + 'foo'

Using = when you mean == or eq can be very confusing. The assignmet will always succeed so the conditional statement is generally also always true so you have a nasty bug that not only fails to work as expected but also modifies your data. You also need to make sure you use eq rather than == when you want a string comparison:

print "What, a string is numerically == 0?" if 'foo' == 0;
cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: Re: Re: creating an array of names
by broquaint (Abbot) on Nov 11, 2002 at 18:50 UTC
    Using = when you mean == or eq can be very confusing.
    Which is why it is a good idea to put the the constant on left-hand side of a numerical comparison
    0 == $foo; # GOOD 0 = $foo; # BAD __output__ Can't modify constant item in scalar assignment at - line 2, near "$fo +o;" Execution of - aborted due to compilation errors.
    So we get a nice compile-time error if we ever slip up with our numerical comparisons, hurrah!
    HTH

    _________
    broquaint

      Cute, don't know if I could ever get into the habit but cute nonethless.

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

      Although I'm familiar with this practice I really don't care for it much. Admittedly, it's just a personal preference. I don't think it flows as well when reading it though. More importantly, there simply is no substitute for learning to be cautious. This trick works nicely when one of the operands is a constant but not at all when they are both variables.

      -sauoq
      "My two cents aren't worth a dime.";
      
      I also exagerate the visible difference by writing assignment with asymetric spacing and equality with symetric spacing.
      $a= 5; if ($a==$b || $c == $d)