2014-01-08 6 views
7

Знаете ли вы, что «$ :: n;» означает ? Раздел кодов выглядит следующим образом.

use JSON::XS; 
# ... 
open (YI, "| $cmd"); 
my $msg = { test => test }; 
my $emsg = encode_json($msg); 
print YI "$msg_inject\n" unless $::n; 
close YI;` 

Я помню, что я также встретил $ :: v раньше. Что такое $ :: v? Имеет ли он дополнительное использование?

Я знаю только $: зарезервированное слово для perl statment с большим количеством линий, заполняющих поле.

С уважением,

TWLMD.

+0

Если вы ответственны за этот кусок кода отмечают, что у него есть немало проблем: два открытых Arg и используя bareword для хранения дескриптора файла. См. Новый perlopentut в текущем выпуске версии 5.19 для примера, как это сделать правильно. –

ответ

18

$::n такой же, как $main::n или просто $n где $ п проживает в main:: пакете.

Такие обозначения игнорируют возможные лексические (определенные с помощью my) определение $n, т.е.

perl -Mstrict -we 'our $n=3; my $n=1; print $::n' 

выход 3

+3

(Интересный лакомый кусочек: 'main ::' - это просто ссылка на пустое пространство имен, поэтому '$ :: n',' $ main :: n', '$ main :: main :: n',' $ main :: main :: main :: n' и т. д. - все равно var.) – ikegami