Chinaunix

标题: 紧急求教大家一个关于Perl二维数组foreach循环遍历的问题 [打印本页]

作者: porcupine    时间: 2007-08-07 21:26
标题: 紧急求教大家一个关于Perl二维数组foreach循环遍历的问题
紧急求教大家一个关于Perl二维数组foreach循环遍历的问题

我首先定义了如下三个数组:

@CORNERS = ("w", "b", "wlt", "bht");
@MODES = ("func", "shift", "capture", "jtag");
@DELAYS = ("max", "min");

然后定义作为判定依据的非空数组:

@RUNS = (["max","w", "func"], ["min", "b", "func"]);

想法很简单,就是希望:
(1)若@RUNS为非空数组,并且当从@CORNERS、@MODES和@DELAYS中取出的值,组成@RUNS中的两组时,$skip=0,否则的话,令$skip=1。
(2)若@RUNS为空数组(即@RUNS = ();时),$skip=0。

#!/usr/bin/perl

foreach $m (@MODES) {
    foreach $c (@CORNERS) {
        foreach $d (@DELAYS) {
            my $skip=0;

            if (exists($RUNS[0])) {
                foreach $r (@RUNS) {
                    if ($d eq $r[0] && $c eq $r[1] && $m eq $r[2]) {$skip=0}
                    else {$skip=1}
                }
            } else {$skip=0};
        }
    }
}

然而,事实上我发现这样去写是行不通的,最终的$skip在各种情况均恒为1。问题似乎出现在“foreach $r (@RUNS)”这一句上,似乎二维数组不能这样简单的用一个$r来遍历。因为我在这句后面加了一个print $r;后发现,打印出的是一堆类似地址的东西,不是我想要的子数组["max","w", "func"]和["min", "b", "func"]。

查了N本书,还是搞不懂为什么,脑袋都大了。急需这个perl脚本使用,请论坛里面的各位高手给与点拨,小弟感激不尽。
作者: flw    时间: 2007-08-07 21:45
看文档,看精华,看和引用有关的资料。
作者: chenxiam    时间: 2007-08-08 13:36
#!/usr/bin/perl

my @MODES = ("func", "shift", "capture", "jtag");
my @CORNERS = ("w", "b", "wlt", "bht");

my @DELAYS = ("max", "min");
my @RUNS = (["max","w", "func"], ["min", "b", "func"]);
    my $skip =1;
    my $i=0;
foreach my $m (@MODES) {
    foreach my $c (@CORNERS) {
        foreach my $d (@DELAYS) {
            if (exists($RUNS[0])) {
                foreach my $r (@RUNS) {
                    if ($d eq $$r[0] && $c eq $$r[1] && $m eq $$r[2]) {
                    $i++;}
                    if($i==2){
                    $skip=0;}
                }
            } else {$skip=0;}
        }
    }
}
  print $skip;


我把你把程序编好,你的错误:
1.逻辑错误 else {$skip=1}
把$skip放在这,输出的值基本是都是1.
2.if ($d eq $r[0] && $c eq $r[1] && $m eq $r[2])
由于是2维组,所以是$$r[0]或$r->[0];

[ 本帖最后由 chenxiam 于 2007-8-8 13:39 编辑 ]
作者: porcupine    时间: 2007-08-09 11:20
原帖由 chenxiam 于 2007-8-8 13:36 发表
#!/usr/bin/perl

my @MODES = ("func", "shift", "capture", "jtag");
my @CORNERS = ("w", "b", "wlt", "bht");

my @DELAYS = ("max", "min");
my @RUNS = (["max","w", "func"], ["min", "b", "func" ...


原来是这样,谢谢chenxiam的帮助!!!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2