サブルーチンがどのように呼び出されるかを検出して、ケースごとに異なる動作をさせることができるようにしたいと思います。
# If it is equaled to a variable, do something:
$var = my_subroutine();
# But if it's not, do something else:
my_subroutine();
それは可能ですか?
サブルーチンがどのように呼び出されるかを検出して、ケースごとに異なる動作をさせることができるようにしたいと思います。
# If it is equaled to a variable, do something:
$var = my_subroutine();
# But if it's not, do something else:
my_subroutine();
それは可能ですか?
wantarrayを使用する
if(not defined wantarray) {
# void context: foo()
}
elsif(not wantarray) {
# scalar context: $x = foo()
}
else {
# list context: @x = foo()
}
はい、あなたが探しているのは次の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!