Perl打印数组值变得怪异

时间:2014-09-11 14:41:41

标签: arrays perl split compare

我遇到的事情我不明白这里是我的代码:

    @iprouteur = split( /./, $arraylist[1] );
    print "lip du routeur est $arraylist[1]\n";
    for ( $i = 2; $i <= $#arraylist; $i++ ) {
        print "we found secondary which is $arraylist[$i]\n";
        @secondary = split( /./, $arraylist[$i] );
        print "voici les ip a comparer : $iprouteur[0] $iprouteur[1] $iprouteur[2] et $secondary[0] $secondary[1] $secondary[2] \n";
        if ( $iprouteur[0] eq $secondary[0] && $iprouteur[1] eq $secondary[1] && $iprouteur[2] eq $secondary[2] ) {
            print "we need to splice \n";
        }
    }

输出如下:

lip du routeur est 126.x.x.x
we found secondary which is 126.x.x.x/24
voici les ip a comparer :    et
we need to splice

为什么perl无法找到 $ iprouteur [x] $ secondary [y] 变量中的内容?

2 个答案:

答案 0 :(得分:2)

问题是您使用正则表达式/./进行拆分。句点.是一个元字符,它是通配符,匹配除换行符之外的任何字符。所以它在使用时会占用你的整个字符串,并返回一堆空字符串。解决方案是逃避这段时间:

@secondary = split(/\./, $arraylist[$i]);
#                   ^--- note the backslash

我在评论中的意思是这一行:

print "voici les ip a comparer : $iprouteur[0] $iprouteur[1] $iprouteur[2] et $secondary[0] $secondary[1] $secondary[2] \n";

可写:

print "voici les ip a comparer : @iprouteur[0,1,2] et @secondary[0,1,2] \n";

阅读和写作都更容易。

答案 1 :(得分:2)

我的不好,我忘了使用&#34;。&#34;使用拆分功能

我忘记了这是一个特殊的角色。

@iprouteur = split(/\./,$arraylist[1]);
@secondary = split(/\./, $arraylist[$i]);