のように、関数の結果を並べ替えようとしていましたsort func();
が、何も返されなかったため、やけどを負いました。Perl は、関数呼び出しがソート ルーチンの後にデータがないと考えたのでしょう。
Perldoc によると、2 番目のパラメータはサブルーチン名またはコード ブロックにすることができます。私は func() を名前ではなく呼び出しと見なしています。これはDWIMMYではないと思います。
これがどのように機能するかをさらに調べるために、私はこれを書きました:
use strict;
use warnings;
sub func {
return qw/ c b a /;
}
my @a;
@a = sort func();
print "1. sort func(): @a\n";
@a = sort &func;
print "2. sort &func: @a\n";
@a = sort +func();
print "3. sort +func(): @a\n";
@a = sort (func());
print "4. sort (func()): @a\n";
@a = sort func;
print "5. sort func: @a\n";
出力、警告は生成されませんでした:
1. sort func():
2. sort &func: a b c
3. sort +func(): a b c
4. sort (func()): a b c
5. sort func: func
番号 1 は、私が得た動作です。出力はありません。
2 は機能するのに 1 は機能しないことに驚いています。私はそれらが同等であると思いました。
私は 3 と 4 を理解しています。問題を解決するために 4 を使用しました。
特に警告がなかったことを考えると、5 で本当に混乱しています。
1 と 2 の違いと、5 が関数の名前を出力する理由を誰かが説明できますか?