zoukankan      html  css  js  c++  java
  • 用wantarray 按需返回列表

    假如需要知道调用时的上下文环境,我们可以用wantarray操作符,如果子程序调用时处于列表上下文,它会返回真。

    sub sorted_text_files {
    
      if(wantarray){
       sort @files;           #列表上下文返回列表
      }else {
       join ' ',sort @files ; #标量上下文时,返回字符串
     }
    
    }

    1.空上下文

    空上下文,wantarray 会跳过后续代码,直接返回undef

    sub sorted_text_files {
      return unless defined wantarray ;
     #实际代码此处省略
    }

    2.精确控制

    想要知道从子程序返回的数据在运行中究竟发生了什么,可以用Contextual::Return 模块探查。

    摘录部分代码:

    use Contextual::Return;
        use Carp;
    
        sub foo {
            return
                SCALAR { 'thirty-twelve' }
                LIST   { 1,2,3 }
    
                BOOL { 1 }
                NUM  { 7*6 }
                STR  { 'forty-two' }
    
                HASHREF  { {name => 'foo', value => 99} }
                ARRAYREF { [3,2,1] }
    
                GLOBREF  { \*STDOUT }
                CODEREF  { croak "Don't use this result as code!"; }
            ;
        }
    
        # and later...
    
        if (my $foo = foo()) {
            for my $count (1..$foo) {
                print "$count: $foo is:\n"
                    . "  array: @{$foo}\n"
                    . "  hash:  $foo->{name} => $foo->{value}\n"
                    ;
            }
            print {$foo} $foo->();
        }
  • 相关阅读:
    用户使用调查报告
    Beta总结
    Beta冲刺Day7
    Beta冲刺Day6
    Beta冲刺Day5
    Beta冲刺Day4
    Beta冲刺Day3
    Beta冲刺Day2
    Beta冲刺Day1
    Beta预备
  • 原文地址:https://www.cnblogs.com/tjxwg/p/3022415.html
Copyright © 2011-2022 走看看