-2

||Perl的工作原理是怎样的?我想实现c风格的||操作。

@ARRAY=qw(one two THREE four);

$i=0;

if(($ARRAY[2] ne "three")||($ARRAY[2] ne "THREE"))         #What's the problem with this
{
   print ":::::$ARRAY[2]::::::\n";
}


while(($ARRAY[$i] ne "three")||($ARRAY[$i] ne "THREE"))       #This goes to infinite loop

{

 print "->$ARRAY[$i]\n";
   $i=$i+1;

}
4

5 回答 5

13

它完全按照您的想法工作。但是,您对自己的情况有想法。每个值要么不是一个值,要么不是另一个值。

我相信你可能想要

if ($ARRAY[2] ne 'three' && $ARRAY[2] ne 'THREE') { ...

或者

if ($ARRAY[2] eq 'three' || $ARRAY[2] eq 'THREE') { ...

您可能还需要一些不区分大小写的比较方式,例如

if (lc $ARRAY[2] ne 'three') { ...

或者可能是不区分大小写的正则表达式匹配。

于 2010-09-24T12:19:30.517 回答
5

两个一般要点。(1) 您的 Perl 脚本应包括use strictuse warnings。(2) 在大多数情况下,您可以直接遍历数组,完全避免使用下标。一个例子:

use strict;
use warnings;

my @ARRAY = qw(one two THREE four);

for my $item (@ARRAY){
    last if lc $item eq 'three';
    print $item, "\n";
}
于 2010-09-24T13:01:59.800 回答
3

其中($ARRAY[2] ne "three") || ($ARRAY[2] ne "THREE")||一个逻辑or,这意味着如果两个表达式中的至少一个为真,则它返回真。好吧,它检查第一个,如果是真的,它甚至不检查第二个。在这种情况下,无论如何,整体都是真的,因为$ARRAY[2]不能等于两个字符串。

好吧,就像在 CI 中一样相信。你想达到什么目标?

于 2010-09-24T12:17:53.577 回答
2

while(($ARRAY[$i] ne "three")||($ARRAY[$i] ne "THREE"))

表达式$ARRAY[$i] ne "three"总是计算为真。因此,您有一个无限循环。该||运算符具有短路行为,因此永远不会评估第二个表达式。

于 2010-09-24T12:20:31.310 回答
1
 ($ARRAY[$i] ne "three") || ($ARRAY[$i] ne "THREE")) 

这在每种情况下都是正确的。它要么不是“三”,要么不是“三”。你想要&&

于 2010-09-24T12:21:46.507 回答