chiel wrote:
> 
> I have a quick question. I use the following line, and this works ok:
> 
> if ($$result_t{$operating_descr.".".$index} =~ /PCMCIA/ && $tmp_status == 3)
> {
> 
>  
> 
> But if I change it to the following:
> 
> if ($$result_t{$operating_descr.".".$index} =~ /PCMCIA/ || /USB/ &&
> $tmp_status == 3) {

First of all, I would replace the noisy and obscure

  $$result_t{$operating_descr.".".$index}

with

  $result_t->{"$operating_descr.$index"}

> I get errors like:
> 
> Use of uninitialized value in pattern match (m//)

That is because you have written

  $$result_t{$operating_descr.".".$index} =~ /PCMCIA/
    ||
  /USB/

and in the absence of an object string, /USB/ is being applied to $_, which must
be undefined at that point in the script.

You should write

  $result_t->{"$operating_descr.$index"} =~ /PCMCIA|USB/

but remember that your regular expression tests only whether your object string
/contains/ either 'USB' or 'PCMCIA'. If you should be checking for equality then
something like this is better, and reads much more fluently:

  {
    my $descr = $result_t->{"$operating_descr.$index"};
    if (($descr eq 'USB' or $descr eq 'PCMCIA') and $tmp_status == 3)) {
      :
    }
  }


HTH,

Rob

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to