Итак, я считаю, что это имеет какое-то отношение к разнице между массивами и списками, но я не знаю, что здесь происходит. Может ли кто-нибудь объяснить, как и почему Perl обрабатывает выражение типа (1..4)
иначе, чем (1, 2, 3, 4)
и @{[1..4]}
?Вызов «скаляра» по результатам оператора диапазона (..) в Perl
$ perl -de1
Loading DB routines from perl5db.pl version 1.31
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1): 1
DB<1> x scalar (1,2,3,4)
0 4
DB<2> x scalar (1..2,3,4)
0 4
DB<3> x scalar (1,2..3,4)
0 4
DB<4> x scalar (1,2,3..4)
0 ''
DB<5> sub foo { (1..4) } # (the actual problem case, except 4 would be a variable)
DB<6> x scalar foo()
0 ''
DB<7> sub bar { @{[1..4]} } # (the workaround)
DB<8> x scalar bar()
0 4
Для дальнейшего просвещения попробуйте 'print scalar (5,6,7,8)' и 'print scalar (@ a = (5,6,7,8))' и, возможно, даже 'print scalar (() = (5,6,7,8)) ' – mob
Да, я добрался до этого. '<3' – fennec