7

サブルーチンがどのように呼び出されるかを検出して、ケースごとに異なる動作をさせることができるようにしたいと思います。

# If it is equaled to a variable, do something:
$var = my_subroutine();

# But if it's not, do something else:
my_subroutine();

それは可能ですか?

4

3 に答える 3

17

wantarrayを使用する

if(not defined wantarray) {
    # void context: foo()
}
elsif(not wantarray) {
    # scalar context: $x = foo()
}
else {
    # list context: @x = foo()
}
于 2013-08-20T14:14:52.580 に答える
9

はい、あなたが探しているのは次のwantarrayとおりです。

use strict;
use warnings;

sub foo{
  if(not defined wantarray){
    print "Called in void context!\n";
  }
  elsif(wantarray){
    print "Called and assigned to an array!\n";
  }
  else{
    print "Called and assigned to a scalar!\n";
  }
}

my @a = foo();
my $b = foo();
foo();

このコードは、次の出力を生成します。

Called and assigned to an array!
Called and assigned to a scalar!
Called in void context!
于 2013-08-20T14:15:36.917 に答える