免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15517 | 回复: 3
打印 上一主题 下一主题

紧急求教大家一个关于Perl二维数组foreach循环遍历的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-07 21:26 |只看该作者 |倒序浏览
紧急求教大家一个关于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脚本使用,请论坛里面的各位高手给与点拨,小弟感激不尽。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-08-07 21:45 |只看该作者
看文档,看精华,看和引用有关的资料。

论坛徽章:
0
3 [报告]
发表于 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 编辑 ]

论坛徽章:
0
4 [报告]
发表于 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的帮助!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP