Попытка понять пакеты, local
, my
и ссылки в perl. Рассмотрим следующий сценарий ...Что такое perl, эквивалентный переменной размера файла C, и как использовать его в суб?
package z;
$x = 5;
sub q() { return $z::x };
printf "q() .. %d\n", q();
my $xr = \$x;
my $x = 7;
printf "xr .. %d\n",$$xr;
$$xr = 9;
printf "x .. %d\n", $x;
$$xr = 11;
printf "q() .. %d\n", q();
Я ожидаю, что каждый из призываний q()
, чтобы вернуть номер, но я не уверен, что они должны вернуться. Вместо этого я получаю следующий выход ...
q() .. 0
Argument "" isn't numeric in printf at src/demo/multi_my.pl line 8.
xr .. 5
x .. 7
q() .. 0
Argument "" isn't numeric in printf at src/demo/multi_my.pl line 22.
'q()' это еще один способ записи '' ''. Используйте другое имя. – ikegami
И не используйте [prototypes] (http://perldoc.perl.org/perlsub.html#Prototypes), если вы не знаете, для чего они нужны, и у них есть веские основания для их использования. 'sub foo() {}' должно быть 'sub foo {}'. – ThisSuitIsBlackNot
Вы должны добавить 'use strict' и' использовать предупреждения 'all'' в верхней части своей программы, чтобы получить реалистичное представление о поведении Perl, поскольку вы будете добавлять их в каждую другую написанную вами программу. – Borodin