Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪些perl代码示例会导致未定义的行为?_Perl - Fatal编程技术网

哪些perl代码示例会导致未定义的行为?

哪些perl代码示例会导致未定义的行为?,perl,Perl,这些是我所知道的: 使用语句修饰符条件或循环构造修改的“my”语句的行为(例如“my$x if…”) 在同一语句中修改变量两次,如$i=$i++ 标量上下文中的排序() truncate(),当长度大于文件长度时 使用32位整数,“1这些只是修改正在迭代的结构主题的变体: map、grep和sort,其中代码引用修改要排序的项目列表 sort的另一个问题出现在代码引用不是幂等(comp-sci意义上)的情况下--sort\u func($a,$b)必须始终为任何给定的$a和$b返回相同的值,容易

这些是我所知道的:

  • 使用语句修饰符条件或循环构造修改的“
    my
    ”语句的行为(例如“
    my$x if…
    ”)
  • 在同一语句中修改变量两次,如
    $i=$i++
  • 标量上下文中的排序()
  • truncate()
    ,当长度大于文件长度时

  • 使用32位整数,“
    1这些只是修改正在迭代的结构主题的变体:

    map
    grep
    sort
    ,其中代码引用修改要排序的项目列表


    sort
    的另一个问题出现在代码引用不是幂等(comp-sci意义上)的情况下--
    sort\u func($a,$b)
    必须始终为任何给定的
    $a
    $b

    返回相同的值,容易被绊倒的值在使用
    每个
    迭代哈希时过早地中断循环

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my %name_to_num = ( one => 1, two => 2, three => 3 );
    
    find_name(2);    # works the first time
    find_name(2);    # but fails this time
    
    exit;
    
    sub find_name {
        my($target) = @_;
    
        while( my($name, $num) = each %name_to_num ) {
            if($num == $target) {
                print "The number $target is called '$name'\n";
                return;
            }
        }
        print "Unable to find a name for $target\n";
    }
    
    输出:

    The number 2 is called 'two'
    Unable to find a name for 2
    

    这显然是一个愚蠢的例子,但问题仍然存在——当使用
    每个
    遍历哈希时,您不应该
    最后一个
    返回
    ,或者应该重置迭代器(使用
    键%hash
    )每次搜索前。

    我已经记不清当时的情况了,但有一次我试图滥用
    排序
    ,通过传递一个非幂等sortsub,得到有趣的奇怪结果。查看此页面:这应该是社区维基。我很想知道为什么有人认为这个问题应该关闭。这不是一个真正可以回答的问题,一个简单的问题它询问的是Perl规范中不受支持和未定义的行为,以及任何可能潜伏的bug。@以太:我认为这就是问题所在。如果你知道什么不起作用,特别是如果有充分的理由,你可以避免它。